Fix for begin-but-no-end rules (xml)
This commit is contained in:
@@ -123,6 +123,10 @@ class Rule(NamedTuple):
|
||||
else:
|
||||
while_captures = ()
|
||||
|
||||
# some grammars (at least xml) have begin rules with no end
|
||||
if begin is not None and end is None and while_ is None:
|
||||
end = '$impossible^'
|
||||
|
||||
# Using the captures key for a begin/end/while rule is short-hand for
|
||||
# giving both beginCaptures and endCaptures with same values
|
||||
if begin and end and captures:
|
||||
|
||||
@@ -58,6 +58,8 @@ SYNTAXES = (
|
||||
# TODO: https://github.com/zargony/atom-language-rust/pull/149
|
||||
Syntax('rust', Ext.CSON, 'https://raw.githubusercontent.com/asottile/atom-language-rust/e113ca67/grammars/rust.cson'), # noqa: E501
|
||||
Syntax('shell', Ext.CSON, 'https://raw.githubusercontent.com/atom/language-shellscript/7008ea926867d8a231003e78094091471c4fccf8/grammars/shell-unix-bash.cson'), # noqa: E501
|
||||
# TODO: https://github.com/atom/language-xml/pull/99
|
||||
Syntax('xml', Ext.CSON, 'https://raw.githubusercontent.com/asottile/language-xml/2d76bc1f/grammars/xml.cson'), # noqa: E501
|
||||
Syntax('yaml', Ext.PLIST, 'https://raw.githubusercontent.com/textmate/yaml.tmbundle/e54ceae3/Syntaxes/YAML.tmLanguage'), # noqa: E501
|
||||
)
|
||||
|
||||
|
||||
@@ -534,3 +534,27 @@ def test_include_base():
|
||||
Region(2, 3, ('test', 'tick')),
|
||||
Region(3, 4, ('test',)),
|
||||
)
|
||||
|
||||
|
||||
def test_rule_with_begin_and_no_end():
|
||||
compiler, state = _compiler_state({
|
||||
'scopeName': 'test',
|
||||
'patterns': [
|
||||
{
|
||||
'begin': '!', 'end': '!', 'name': 'bang',
|
||||
'patterns': [{'begin': '--', 'name': 'invalid'}],
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
state, regions = highlight_line(compiler, state, '!x! !--!', True)
|
||||
|
||||
assert regions == (
|
||||
Region(0, 1, ('test', 'bang')),
|
||||
Region(1, 2, ('test', 'bang')),
|
||||
Region(2, 3, ('test', 'bang')),
|
||||
Region(3, 4, ('test',)),
|
||||
Region(4, 5, ('test', 'bang')),
|
||||
Region(5, 7, ('test', 'bang', 'invalid')),
|
||||
Region(7, 8, ('test', 'bang', 'invalid')),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user