While trying to convert my homegrown PLSQL.tmLanguage to sublime-syntax I get the above mentioned exception. I managed to locate the rule:
<dict>
<key>name</key>
<string>meta.ddl.alter.table.sql</string>
<key>begin</key>
<string>(?ix)\b
(alter\s+table\s+)
(([a-z][a-z0-9_#\$]*\.)?([a-z][a-z0-9_#\$]*))
\b</string>
<key>end</key>
<string>(;/])</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.sql</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>entity.name.sql</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>\(\D</string>
<key>end</key>
<string>\)</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#column_definition</string>
</dict>
</array>
</dict>
<dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>keyword.plsql</string>
<key>match</key>
<string>(?i)(check|constraint|(foreign|primary)\s+key|references|unique)</string>
</dict>
<dict>
<key>name</key>
<string>keyword.sql</string>
<key>match</key>
<string>(?i)\b(add|drop|modify)\s*\b</string>
</dict>
<dict>
<key>name</key>
<string>keyword.sql</string>
<key>match</key>
<string>(?i)\busing\s+index\b</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>#segments_attribute_clause</string>
</dict>
</array>
</dict>
This rule is translated to the following JSON. I put a comment at the exception raising part .
{
'end': '(;/])',
'name': 'meta.ddl.alter.table.sql',
'begin': '(?ix)\\b\n (alter\\s+table\\s+)\n (([a-z][a-z0-9_#\\$]*\\.)?([a-z][a-z0-9_#\\$]*))\n \\b',
'patterns':
{
'end': '\\)',
'begin': '\\(\\D',
'patterns': {'include': '#column_definition'}]
},
{
'patterns': // Exception: make_context will not find "begin", "match" or "include" in "for p in patterns:" ?
{
'match': '(?i)(check|constraint|(foreign|primary)\\s+key|references|unique)',
'name': 'keyword.plsql'
},
{
'match': '(?i)\\b(add|drop|modify)\\s*\\b',
'name': 'keyword.sql'
},
{
'match': '(?i)\\busing\\s+index\\b',
'name': 'keyword.sql'
}
]
},
{
'include': '#segments_attribute_clause'
}
],
'captures':
{
'4': {'name': 'entity.name.sql'},
'1': {'name': 'keyword.sql'}
}
}
I don’t know if my rule is wrong (but working) or convert_syntax.py needs an update.
The error message
Traceback (most recent call last):
File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 535, in run_
return self.run()
File "convert_syntax in C:\Program Files\Sublime Text 3\Packages\Default.sublime-package", line 446, in run
File "convert_syntax in C:\Program Files\Sublime Text 3\Packages\Default.sublime-package", line 370, in convert
File "convert_syntax in C:\Program Files\Sublime Text 3\Packages\Default.sublime-package", line 236, in make_context
File "convert_syntax in C:\Program Files\Sublime Text 3\Packages\Default.sublime-package", line 298, in make_context
Exception: unknown pattern type: