PanAeon / vscode-tmgrammar-test

Test helpers for VSCode textmate grammars

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Aborted due to an error: invalid pattern in look-behind

roydukkey opened this issue · comments

commented

v0.0.10

> vscode-tmgrammar-test -s source.sass -g ./dist/Sass.tmLanguage.json -t ./test/**/*.sass "-c"

✓ ./test/Rules/Control/while.sass run successfuly.
✖ testcase ./test/Rules/Control/conditional.sass aborted due to an error
Error: invalid pattern in look-behind
    at Object.createOnigScanner (./node_modules/vscode-textmate/release/main.js:67:24)
    at Grammar.createOnigScanner (./node_modules/vscode-textmate/release/main.js:2578:30)
    at RegExpSourceList.compile (./node_modules/vscode-textmate/release/main.js:1875:38)
    at BeginEndRule.compile (./node_modules/vscode-textmate/release/main.js:2045:45)
    at matchRule (./node_modules/vscode-textmate/release/main.js:2822:28)
    at matchRuleOrInjections (./node_modules/vscode-textmate/release/main.js:2841:23)
    at scanNext (./node_modules/vscode-textmate/release/main.js:2937:17)
    at _tokenizeString (./node_modules/vscode-textmate/release/main.js:2930:9)
    at Grammar._tokenize (./node_modules/vscode-textmate/release/main.js:2680:25)
    at Grammar.tokenizeLine (./node_modules/vscode-textmate/release/main.js:2643:22)

Sass.tmLanguage.json

{
	"name": "SASS",
	"scopeName": "source.sass",
	"patterns": [
		{
			"name": "meta.at-rule.conditional.sass",
			"begin": "((@)if)\\b|((@)else(?=.*?if))\\b",
			"end": "$",
			"beginCaptures": {
				"1": {
					"name": "keyword.control.conditional.if.sass"
				},
				"2": {
					"name": "punctuation.definition.keyword.sass"
				},
				"3": {
					"name": "keyword.control.conditional.else.sass"
				},
				"4": {
					"name": "punctuation.definition.keyword.sass"
				}
			},
			"patterns": [
				{
					"name": "keyword.control.conditional.if",
					"match": "(?<=@else.*?)if"
				},
				{
					"include": "#line-comment"
				}
			]
		},
		{
			"name": "meta.at-rule.conditional.sass",
			"begin": "((@)else)\\b",
			"end": "$",
			"beginCaptures": {
				"1": {
					"name": "keyword.control.conditional.else.sass"
				},
				"2": {
					"name": "punctuation.definition.keyword.sass"
				}
			},
			"patterns": [
				{
					"include": "#line-comment"
				}
			]
		},
		{
			"name": "meta.at-rule.loop.while.sass",
			"begin": "((@)while)\\b",
			"end": "$",
			"beginCaptures": {
				"1": {
					"name": "keyword.control.loop.sass"
				},
				"2": {
					"name": "punctuation.definition.keyword.sass"
				}
			},
			"patterns": [
				{
					"include": "#line-comment"
				}
			]
		}
	],
	"repository": {
		"line-comment": {
			"patterns": [
				{
					"name": "comment.line.double-slash.sass",
					"begin": "\\/\\/",
					"end": "$",
					"beginCaptures": {
						"0": {
							"name": "punctuation.definition.comment.sass"
						}
					}
				},
				{
					"name": "comment.line.slash-asterisk.sass",
					"begin": "\\/\\*",
					"end": "(\\*\\/)|$",
					"beginCaptures": {
						"0": {
							"name": "punctuation.definition.comment.begin.sass"
						}
					},
					"endCaptures": {
						"1": {
							"name": "punctuation.definition.comment.end.sass"
						}
					},
					"patterns": [
						{
							"include": "#interpolation"
						}
					]
				}
			]
		},
		"interpolation": {
			"name": "variable.interpolation.sass",
			"begin": "#{",
			"end": "(})|$",
			"beginCaptures": {
				"0": {
					"name": "punctuation.definition.interpolation.begin.bracket.curly.sass"
				}
			},
			"endCaptures": {
				"1": {
					"name": "punctuation.definition.interpolation.end.bracket.curly.sass"
				}
			},
			"patterns": [
				{
					"include": "#property-value"
				}
			]
		},
		"property-value": {
			"patterns": [
				{
					"name": "variable.sass",
					"match": "(\\$|--)[-_[:alnum:]]+\\b"
				},
				{
					"name": "string.quoted.single.sass",
					"begin": "'",
					"end": "'",
					"beginCaptures": {
						"0": {
							"name": "punctuation.definition.string.begin.sass"
						}
					},
					"endCaptures": {
						"0": {
							"name": "punctuation.definition.string.end.sass"
						}
					},
					"patterns": [
						{
							"include": "#interpolation"
						}
					]
				},
				{
					"name": "string.quoted.double.sass",
					"begin": "\"",
					"end": "\"",
					"beginCaptures": {
						"0": {
							"name": "punctuation.definition.string.begin.sass"
						}
					},
					"endCaptures": {
						"0": {
							"name": "punctuation.definition.string.end.sass"
						}
					},
					"patterns": [
						{
							"include": "#interpolation"
						}
					]
				},
				{
					"include": "#0f1cf79-numeric-values"
				},
				{
					"include": "#0f1cf79-property-keywords"
				},
				{
					"include": "#0f1cf79-color-keywords"
				},
				{
					"name": "keyword.operator.arithmetic.sass",
					"match": "[*/]|[-+](?!\\d)|(?<!\\s)[-+](?=\\d)"
				},
				{
					"begin": "\\(",
					"end": "\\)",
					"beginCaptures": {
						"0": {
							"name": "punctuation.definition.begin.bracket.round.sass"
						}
					},
					"endCaptures": {
						"0": {
							"name": "punctuation.definition.end.bracket.round.sass"
						}
					},
					"patterns": [
						{
							"include": "#property-value"
						}
					]
				}
			]
		},
		"0f1cf79-numeric-values": {
			"patterns": [
				{
					"captures": {
						"1": {
							"name": "punctuation.definition.constant.css"
						}
					},
					"match": "(#)(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})\\b",
					"name": "constant.other.color.rgb-value.hex.css"
				},
				{
					"captures": {
						"1": {
							"name": "keyword.other.unit.percentage.css"
						},
						"2": {
							"name": "keyword.other.unit.${2:/downcase}.css"
						}
					},
					"match": "(?xi) (?<![\\w-])\n[-+]?                               # Sign indicator\n\n(?:                                 # Numerals\n    [0-9]+ (?:\\.[0-9]+)?           # Integer/float with leading digits\n  | \\.[0-9]+                       # Float without leading digits\n)\n\n(?:                                 # Scientific notation\n  (?<=[0-9])                        # Exponent must follow a digit\n  E                                 # Exponent indicator\n  [-+]?                             # Possible sign indicator\n  [0-9]+                            # Exponent value\n)?\n\n(?:                                 # Possible unit for data-type:\n  (%)                               # - Percentage\n  | ( deg|grad|rad|turn             # - Angle\n    | Hz|kHz                        # - Frequency\n    | ch|cm|em|ex|fr|in|mm|mozmm|   # - Length\n      pc|pt|px|q|rem|vh|vmax|vmin|\n      vw\n    | dpi|dpcm|dppx                 # - Resolution\n    | s|ms                          # - Time\n    )\n  \\b                               # Boundary checking intentionally lax to\n)?                                  # facilitate embedding in CSS-like grammars",
					"name": "constant.numeric.css"
				}
			]
		},
		"0f1cf79-property-keywords": {
			"patterns": [
				{
					"match": "(?xi) (?<![\\w-])\n(above|absolute|active|add|additive|after-edge|alias|all|all-petite-caps|all-scroll|all-small-caps|alpha|alphabetic|alternate|alternate-reverse\n|always|antialiased|auto|auto-pos|available|avoid|avoid-column|avoid-page|avoid-region|backwards|balance|baseline|before-edge|below|bevel\n|bidi-override|blink|block|block-axis|block-start|block-end|bold|bolder|border|border-box|both|bottom|bottom-outside|break-all|break-word|bullets\n|butt|capitalize|caption|cell|center|central|char|circle|clip|clone|close-quote|closest-corner|closest-side|col-resize|collapse|color|color-burn\n|color-dodge|column|column-reverse|common-ligatures|compact|condensed|contain|content|content-box|contents|context-menu|contextual|copy|cover\n|crisp-edges|crispEdges|crosshair|cyclic|darken|dashed|decimal|default|dense|diagonal-fractions|difference|digits|disabled|disc|discretionary-ligatures\n|distribute|distribute-all-lines|distribute-letter|distribute-space|dot|dotted|double|double-circle|downleft|downright|e-resize|each-line|ease|ease-in\n|ease-in-out|ease-out|economy|ellipse|ellipsis|embed|end|evenodd|ew-resize|exact|exclude|exclusion|expanded|extends|extra-condensed|extra-expanded\n|fallback|farthest-corner|farthest-side|fill|fill-available|fill-box|filled|fit-content|fixed|flat|flex|flex-end|flex-start|flip|forwards|freeze\n|from-image|full-width|geometricPrecision|georgian|grab|grabbing|grayscale|grid|groove|hand|hanging|hard-light|help|hidden|hide\n|historical-forms|historical-ligatures|horizontal|horizontal-tb|hue|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space\n|ideographic|inactive|infinite|inherit|initial|inline|inline-axis|inline-block|inline-end|inline-flex|inline-grid|inline-list-item|inline-start\n|inline-table|inset|inside|inter-character|inter-ideograph|inter-word|intersect|invert|isolate|isolate-override|italic|jis04|jis78|jis83\n|jis90|justify|justify-all|kannada|keep-all|landscape|large|larger|left|lighten|lighter|line|line-edge|line-through|linear|linearRGB\n|lining-nums|list-item|local|loose|lowercase|lr|lr-tb|ltr|luminance|luminosity|main-size|mandatory|manipulation|manual|margin-box|match-parent\n|match-source|mathematical|max-content|medium|menu|message-box|middle|min-content|miter|mixed|move|multiply|n-resize|narrower|ne-resize\n|nearest-neighbor|nesw-resize|newspaper|no-change|no-clip|no-close-quote|no-common-ligatures|no-contextual|no-discretionary-ligatures\n|no-drop|no-historical-ligatures|no-open-quote|no-repeat|none|nonzero|normal|not-allowed|nowrap|ns-resize|numbers|numeric|nw-resize|nwse-resize\n|oblique|oldstyle-nums|open|open-quote|optimizeLegibility|optimizeQuality|optimizeSpeed|optional|ordinal|outset|outside|over|overlay|overline|padding\n|padding-box|page|painted|pan-down|pan-left|pan-right|pan-up|pan-x|pan-y|paused|petite-caps|pixelated|plaintext|pointer|portrait|pre|pre-line\n|pre-wrap|preserve-3d|progress|progressive|proportional-nums|proportional-width|proximity|radial|recto|region|relative|remove|repeat|repeat-[xy]\n|reset-size|reverse|revert|ridge|right|rl|rl-tb|round|row|row-resize|row-reverse|row-severse|rtl|ruby|ruby-base|ruby-base-container|ruby-text\n|ruby-text-container|run-in|running|s-resize|saturation|scale-down|screen|scroll|scroll-position|self-start|self-end|se-resize|semi-condensed\n|semi-expanded|separate\n|sesame|show|sideways|sideways-left|sideways-lr|sideways-right|sideways-rl|simplified|slashed-zero|slice|small|small-caps|small-caption|smaller\n|smooth|soft-light|solid|space|space-around|space-between|space-evenly|spell-out|square|sRGB|stacked-fractions|start|static|status-bar|swap\n|step-end|step-start|sticky|stretch|strict|stroke|stroke-box|style|sub|subgrid|subpixel-antialiased|subtract|super|sw-resize|symbolic|table\n|table-caption|table-cell|table-column|table-column-group|table-footer-group|table-header-group|table-row|table-row-group|tabular-nums|tb|tb-rl\n|text|text-after-edge|text-before-edge|text-bottom|text-top|thick|thin|titling-caps|top|top-outside|touch|traditional|transparent|triangle\n|ultra-condensed|ultra-expanded|under|underline|unicase|unset|upleft|uppercase|upright|use-glyph-orientation|use-script|verso|vertical\n|vertical-ideographic|vertical-lr|vertical-rl|vertical-text|view-box|visible|visibleFill|visiblePainted|visibleStroke|w-resize|wait|wavy\n|weight|whitespace|wider|words|wrap|wrap-reverse|x-large|x-small|xx-large|xx-small|zero|zoom-in|zoom-out)\n(?![\\w-])",
					"name": "support.constant.property-value.css"
				},
				{
					"match": "(?xi) (?<![\\w-])\n(arabic-indic|armenian|bengali|cambodian|circle|cjk-decimal|cjk-earthly-branch|cjk-heavenly-stem|cjk-ideographic\n|decimal|decimal-leading-zero|devanagari|disc|disclosure-closed|disclosure-open|ethiopic-halehame-am\n|ethiopic-halehame-ti-e[rt]|ethiopic-numeric|georgian|gujarati|gurmukhi|hangul|hangul-consonant|hebrew\n|hiragana|hiragana-iroha|japanese-formal|japanese-informal|kannada|katakana|katakana-iroha|khmer\n|korean-hangul-formal|korean-hanja-formal|korean-hanja-informal|lao|lower-alpha|lower-armenian|lower-greek\n|lower-latin|lower-roman|malayalam|mongolian|myanmar|oriya|persian|simp-chinese-formal|simp-chinese-informal\n|square|tamil|telugu|thai|tibetan|trad-chinese-formal|trad-chinese-informal|upper-alpha|upper-armenian\n|upper-latin|upper-roman|urdu)\n(?![\\w-])",
					"name": "support.constant.property-value.list-style-type.css"
				},
				{
					"match": "(?<![\\w-])(?i:-(?:ah|apple|atsc|epub|hp|khtml|moz|ms|o|rim|ro|tc|wap|webkit|xv)|(?:mso|prince))-[a-zA-Z-]+",
					"name": "support.constant.vendored.property-value.css"
				},
				{
					"match": "(?<![\\w-])(?i:arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|cursive|fantasy|monospace)(?![\\w-])",
					"name": "support.constant.font-name.css"
				}
			]
		},
		"0f1cf79-color-keywords": {
			"patterns": [
				{
					"match": "(?i)(?<![\\w-])(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)(?![\\w-])",
					"name": "support.constant.color.w3c-standard-color-name.css"
				},
				{
					"match": "(?xi) (?<![\\w-])\n(aliceblue|antiquewhite|aquamarine|azure|beige|bisque|blanchedalmond|blueviolet|brown|burlywood\n|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan\n|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange\n|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise\n|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen\n|gainsboro|ghostwhite|gold|goldenrod|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki\n|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow\n|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray\n|lightslategrey|lightsteelblue|lightyellow|limegreen|linen|magenta|mediumaquamarine|mediumblue\n|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise\n|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|oldlace|olivedrab|orangered\n|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum\n|powderblue|rebeccapurple|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell\n|sienna|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|thistle|tomato\n|transparent|turquoise|violet|wheat|whitesmoke|yellowgreen)\n(?![\\w-])",
					"name": "support.constant.color.w3c-extended-color-name.css"
				},
				{
					"match": "(?i)(?<![\\w-])currentColor(?![\\w-])",
					"name": "support.constant.color.current.css"
				},
				{
					"match": "(?xi) (?<![\\w-])\n(ActiveBorder|ActiveCaption|AppWorkspace|Background|ButtonFace|ButtonHighlight|ButtonShadow\n|ButtonText|CaptionText|GrayText|Highlight|HighlightText|InactiveBorder|InactiveCaption\n|InactiveCaptionText|InfoBackground|InfoText|Menu|MenuText|Scrollbar|ThreeDDarkShadow\n|ThreeDFace|ThreeDHighlight|ThreeDLightShadow|ThreeDShadow|Window|WindowFrame|WindowText)\n(?![\\w-])",
					"name": "invalid.deprecated.color.system.css"
				}
			]
		}
	}
}

./test/while.sass

// SYNTAX TEST "source.sass"

@while$value<10
// <----- meta.at-rule.loop.while.sass keyword.control.loop.sass
// <- punctuation.definition.keyword.sass

@while/* 1 */$value<10/* 4 */// 5
//    ^^ comment.line.slash-asterisk.sass punctuation.definition.comment.begin.sass
//         ^^ comment.line.slash-asterisk.sass punctuation.definition.comment.end.sass
//                    ^^ comment.line.slash-asterisk.sass punctuation.definition.comment.begin.sass
//                         ^^ comment.line.slash-asterisk.sass punctuation.definition.comment.end.sass
//                           ^^ comment.line.double-slash.sass punctuation.definition.comment.sass

./test/conditional.sass

// SYNTAX TEST "source.sass"

@if$value<10
// <----- meta.at-rule.loop.conditional.sass keyword.control.conditional.if.sass
// <- punctuation.definition.keyword.sass

closed via #24