diff --git a/TypeScript.YAML-tmLanguage b/TypeScript.YAML-tmLanguage index 36fa5547..778b27fc 100644 --- a/TypeScript.YAML-tmLanguage +++ b/TypeScript.YAML-tmLanguage @@ -1752,6 +1752,14 @@ repository: captures: '1': { name: keyword.control.as.ts } '2': { name: storage.modifier.ts } + # if type starts on next line use end of a non-empty line as end of type + - begin: '{{startOfIdentifier}}(?:(as)|(satisfies))(?=\s*$)' + beginCaptures: + '1': { name: keyword.control.as.ts } + '2': { name: keyword.control.satisfies.ts } + end: (?]|\|\||\&\&|\!\=\=|^\s*$|({{startOfIdentifier}}(as|satisfies)\s+)|(\s+\<))|((?<=\S)(?=\s*$))) + patterns: + - include: '#type' - begin: '{{startOfIdentifier}}(?:(as)|(satisfies))\s+' beginCaptures: '1': { name: keyword.control.as.ts } diff --git a/TypeScript.tmLanguage b/TypeScript.tmLanguage index 4d91f6ad..440ed1e1 100644 --- a/TypeScript.tmLanguage +++ b/TypeScript.tmLanguage @@ -5696,6 +5696,32 @@ + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(as)|(satisfies))(?=\s*$) + beginCaptures + + 1 + + name + keyword.control.as.ts + + 2 + + name + keyword.control.satisfies.ts + + + end + (?<!\bas|\bsatisfies|[|&])((?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|^\s*$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as|satisfies)\s+)|(\s+\<))|((?<=\S)(?=\s*$))) + patterns + + + include + #type + + + begin (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(as)|(satisfies))\s+ diff --git a/TypeScriptReact.tmLanguage b/TypeScriptReact.tmLanguage index a7aec5da..a8d93de3 100644 --- a/TypeScriptReact.tmLanguage +++ b/TypeScriptReact.tmLanguage @@ -5642,6 +5642,32 @@ + + begin + (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(as)|(satisfies))(?=\s*$) + beginCaptures + + 1 + + name + keyword.control.as.tsx + + 2 + + name + keyword.control.satisfies.tsx + + + end + (?<!\bas|\bsatisfies|[|&])((?=[;),}\]:?\-\+\>]|\|\||\&\&|\!\=\=|^\s*$|((?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(as|satisfies)\s+)|(\s+\<))|((?<=\S)(?=\s*$))) + patterns + + + include + #type + + + begin (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(as)|(satisfies))\s+ diff --git a/tests/baselines/Issue1079.baseline.txt b/tests/baselines/Issue1079.baseline.txt new file mode 100644 index 00000000..c91e3604 --- /dev/null +++ b/tests/baselines/Issue1079.baseline.txt @@ -0,0 +1,184 @@ +original file +----------------------------------- +const a = b as + A | undefined + +const a = b satisfies + A | undefined + +const inlineSourceMap = convertSourceMap.fromSource(content)?.toObject() as + SourceMap | undefined +foo(inlineSourceMap) + +const e = (f as + G); + +----------------------------------- + +Grammar: TypeScript.tmLanguage +----------------------------------- +>const a = b as + ^^^^^ + source.ts meta.var.expr.ts storage.type.ts + ^ + source.ts meta.var.expr.ts + ^ + source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts + ^ + source.ts meta.var.expr.ts meta.var-single-variable.expr.ts + ^ + source.ts meta.var.expr.ts keyword.operator.assignment.ts + ^ + source.ts meta.var.expr.ts + ^ + source.ts meta.var.expr.ts variable.other.readwrite.ts + ^ + source.ts meta.var.expr.ts + ^^ + source.ts meta.var.expr.ts keyword.control.as.ts +> A | undefined + ^^ + source.ts meta.var.expr.ts + ^ + source.ts meta.var.expr.ts entity.name.type.ts + ^ + source.ts meta.var.expr.ts + ^ + source.ts meta.var.expr.ts keyword.operator.type.ts + ^ + source.ts meta.var.expr.ts + ^^^^^^^^^ + source.ts meta.var.expr.ts support.type.builtin.ts +> + ^ + source.ts +>const a = b satisfies + ^^^^^ + source.ts meta.var.expr.ts storage.type.ts + ^ + source.ts meta.var.expr.ts + ^ + source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts + ^ + source.ts meta.var.expr.ts meta.var-single-variable.expr.ts + ^ + source.ts meta.var.expr.ts keyword.operator.assignment.ts + ^ + source.ts meta.var.expr.ts + ^ + source.ts meta.var.expr.ts variable.other.readwrite.ts + ^ + source.ts meta.var.expr.ts + ^^^^^^^^^ + source.ts meta.var.expr.ts keyword.control.satisfies.ts +> A | undefined + ^^ + source.ts meta.var.expr.ts + ^ + source.ts meta.var.expr.ts entity.name.type.ts + ^ + source.ts meta.var.expr.ts + ^ + source.ts meta.var.expr.ts keyword.operator.type.ts + ^ + source.ts meta.var.expr.ts + ^^^^^^^^^ + source.ts meta.var.expr.ts support.type.builtin.ts +> + ^ + source.ts +>const inlineSourceMap = convertSourceMap.fromSource(content)?.toObject() as + ^^^^^ + source.ts meta.var.expr.ts storage.type.ts + ^ + source.ts meta.var.expr.ts + ^^^^^^^^^^^^^^^ + source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts + ^ + source.ts meta.var.expr.ts meta.var-single-variable.expr.ts + ^ + source.ts meta.var.expr.ts keyword.operator.assignment.ts + ^ + source.ts meta.var.expr.ts + ^^^^^^^^^^^^^^^^ + source.ts meta.var.expr.ts meta.function-call.ts variable.other.object.ts + ^ + source.ts meta.var.expr.ts meta.function-call.ts punctuation.accessor.ts + ^^^^^^^^^^ + source.ts meta.var.expr.ts meta.function-call.ts entity.name.function.ts + ^ + source.ts meta.var.expr.ts meta.brace.round.ts + ^^^^^^^ + source.ts meta.var.expr.ts variable.other.readwrite.ts + ^ + source.ts meta.var.expr.ts meta.brace.round.ts + ^^ + source.ts meta.var.expr.ts meta.function-call.ts punctuation.accessor.optional.ts + ^^^^^^^^ + source.ts meta.var.expr.ts meta.function-call.ts entity.name.function.ts + ^ + source.ts meta.var.expr.ts meta.brace.round.ts + ^ + source.ts meta.var.expr.ts meta.brace.round.ts + ^ + source.ts meta.var.expr.ts + ^^ + source.ts meta.var.expr.ts keyword.control.as.ts +> SourceMap | undefined + ^^ + source.ts meta.var.expr.ts + ^^^^^^^^^ + source.ts meta.var.expr.ts entity.name.type.ts + ^ + source.ts meta.var.expr.ts + ^ + source.ts meta.var.expr.ts keyword.operator.type.ts + ^ + source.ts meta.var.expr.ts + ^^^^^^^^^ + source.ts meta.var.expr.ts support.type.builtin.ts +>foo(inlineSourceMap) + ^^^ + source.ts meta.function-call.ts entity.name.function.ts + ^ + source.ts meta.brace.round.ts + ^^^^^^^^^^^^^^^ + source.ts variable.other.readwrite.ts + ^ + source.ts meta.brace.round.ts +> + ^ + source.ts +>const e = (f as + ^^^^^ + source.ts meta.var.expr.ts storage.type.ts + ^ + source.ts meta.var.expr.ts + ^ + source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts + ^ + source.ts meta.var.expr.ts meta.var-single-variable.expr.ts + ^ + source.ts meta.var.expr.ts keyword.operator.assignment.ts + ^ + source.ts meta.var.expr.ts + ^ + source.ts meta.var.expr.ts meta.brace.round.ts + ^ + source.ts meta.var.expr.ts variable.other.readwrite.ts + ^ + source.ts meta.var.expr.ts + ^^ + source.ts meta.var.expr.ts keyword.control.as.ts +> G); + ^^ + source.ts meta.var.expr.ts + ^ + source.ts meta.var.expr.ts entity.name.type.ts + ^ + source.ts meta.var.expr.ts meta.brace.round.ts + ^ + source.ts punctuation.terminator.statement.ts +> + ^ + source.ts \ No newline at end of file diff --git a/tests/cases/Issue1079.ts b/tests/cases/Issue1079.ts new file mode 100644 index 00000000..423bf80d --- /dev/null +++ b/tests/cases/Issue1079.ts @@ -0,0 +1,12 @@ +const a = b as + A | undefined + +const a = b satisfies + A | undefined + +const inlineSourceMap = convertSourceMap.fromSource(content)?.toObject() as + SourceMap | undefined +foo(inlineSourceMap) + +const e = (f as + G);