98 changes: 98 additions & 0 deletions tests/baselines/Issue637a.baseline.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
original file
-----------------------------------
// @onlyOwnGrammar - since this example has slightly different scopes because of how cast expression works
const goodHighlighting = <T extends I>(
arg: T
) => {
const a = arg
return a
}
-----------------------------------

Grammar: TypeScript.tmLanguage
-----------------------------------
>// @onlyOwnGrammar - since this example has slightly different scopes because of how cast expression works
^^
source.ts comment.line.double-slash.ts punctuation.definition.comment.ts
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
source.ts comment.line.double-slash.ts
>const goodHighlighting = <T extends I>(
^^^^^
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 entity.name.function.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.type.parameters.ts punctuation.definition.typeparameters.begin.ts
^
source.ts meta.var.expr.ts meta.type.parameters.ts entity.name.type.ts
^
source.ts meta.var.expr.ts meta.type.parameters.ts
^^^^^^^
source.ts meta.var.expr.ts meta.type.parameters.ts storage.modifier.ts
^
source.ts meta.var.expr.ts meta.type.parameters.ts
^
source.ts meta.var.expr.ts meta.type.parameters.ts entity.name.type.ts
^
source.ts meta.var.expr.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
^
source.ts meta.var.expr.ts meta.brace.round.ts
> arg: T
^^
source.ts meta.var.expr.ts
^^^
source.ts meta.var.expr.ts variable.parameter.ts
^
source.ts meta.var.expr.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
^
source.ts meta.var.expr.ts meta.type.annotation.ts
^
source.ts meta.var.expr.ts meta.type.annotation.ts entity.name.type.ts
>) => {
^
source.ts meta.var.expr.ts meta.brace.round.ts
^
source.ts meta.var.expr.ts
^^
source.ts meta.var.expr.ts meta.arrow.ts storage.type.function.arrow.ts
^
source.ts meta.var.expr.ts meta.arrow.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
> const a = arg
^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
^^^^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts storage.type.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.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.arrow.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts keyword.operator.assignment.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts
^^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts meta.var.expr.ts variable.other.readwrite.ts
> return a
^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
^^^^^^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts keyword.control.flow.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts variable.other.readwrite.ts
>}
^
source.ts meta.var.expr.ts meta.arrow.ts meta.block.ts punctuation.definition.block.ts
98 changes: 98 additions & 0 deletions tests/baselines/Issue637b.baseline.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
original file
-----------------------------------
// @onlyOwnGrammar - since this example has slightly different scopes because of how cast expression works and isnt supported in the tsx file
const goodHighlighting = <T extends I>(
arg: T
) => {
const a = arg
return a
}
-----------------------------------

Grammar: TypeScriptReact.tmLanguage
-----------------------------------
>// @onlyOwnGrammar - since this example has slightly different scopes because of how cast expression works and isnt supported in the tsx file
^^
source.tsx comment.line.double-slash.tsx punctuation.definition.comment.tsx
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
source.tsx comment.line.double-slash.tsx
>const goodHighlighting = <T extends I>(
^^^^^
source.tsx meta.var.expr.tsx storage.type.tsx
^
source.tsx meta.var.expr.tsx
^^^^^^^^^^^^^^^^
source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.definition.variable.tsx variable.other.constant.tsx entity.name.function.tsx
^
source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx
^
source.tsx meta.var.expr.tsx keyword.operator.assignment.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.type.parameters.tsx punctuation.definition.typeparameters.begin.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.type.parameters.tsx entity.name.type.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.type.parameters.tsx
^^^^^^^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.type.parameters.tsx storage.modifier.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.type.parameters.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.type.parameters.tsx entity.name.type.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.type.parameters.tsx punctuation.definition.typeparameters.end.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.parameters.tsx punctuation.definition.parameters.begin.tsx
> arg: T
^^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.parameters.tsx
^^^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.parameters.tsx variable.parameter.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.parameters.tsx meta.type.annotation.tsx keyword.operator.type.annotation.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.parameters.tsx meta.type.annotation.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.parameters.tsx meta.type.annotation.tsx entity.name.type.tsx
>) => {
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.parameters.tsx punctuation.definition.parameters.end.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx
^^
source.tsx meta.var.expr.tsx meta.arrow.tsx storage.type.function.arrow.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx punctuation.definition.block.tsx
> const a = arg
^^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx
^^^^^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx meta.var.expr.tsx storage.type.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx meta.var.expr.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.definition.variable.tsx variable.other.constant.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx meta.var.expr.tsx keyword.operator.assignment.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx meta.var.expr.tsx
^^^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx meta.var.expr.tsx variable.other.readwrite.tsx
> return a
^^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx
^^^^^^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx keyword.control.flow.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx variable.other.readwrite.tsx
>}
^
source.tsx meta.var.expr.tsx meta.arrow.tsx meta.block.tsx punctuation.definition.block.tsx
286 changes: 286 additions & 0 deletions tests/baselines/Issue748.baseline.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,286 @@
original file
-----------------------------------
// @onlyOwnGrammar - As this has type assertion
type X = A | B;
type A = string;
type B = number;
function foo<T extends X>(arg: T): T extends B ? number : string {
if (arg === "A") return <T extends B ? number : never>111;
return <T extends B ? never : string>"returning a string";
}
foo("A");
foo(1);
-----------------------------------

Grammar: TypeScript.tmLanguage
-----------------------------------
>// @onlyOwnGrammar - As this has type assertion
^^
source.ts comment.line.double-slash.ts punctuation.definition.comment.ts
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
source.ts comment.line.double-slash.ts
>type X = A | B;
^^^^
source.ts meta.type.declaration.ts storage.type.type.ts
^
source.ts meta.type.declaration.ts
^
source.ts meta.type.declaration.ts entity.name.type.alias.ts
^
source.ts meta.type.declaration.ts
^
source.ts meta.type.declaration.ts keyword.operator.assignment.ts
^
source.ts meta.type.declaration.ts
^
source.ts meta.type.declaration.ts entity.name.type.ts
^
source.ts meta.type.declaration.ts
^
source.ts meta.type.declaration.ts keyword.operator.type.ts
^
source.ts meta.type.declaration.ts
^
source.ts meta.type.declaration.ts entity.name.type.ts
^
source.ts punctuation.terminator.statement.ts
>type A = string;
^^^^
source.ts meta.type.declaration.ts storage.type.type.ts
^
source.ts meta.type.declaration.ts
^
source.ts meta.type.declaration.ts entity.name.type.alias.ts
^
source.ts meta.type.declaration.ts
^
source.ts meta.type.declaration.ts keyword.operator.assignment.ts
^
source.ts meta.type.declaration.ts
^^^^^^
source.ts meta.type.declaration.ts support.type.primitive.ts
^
source.ts punctuation.terminator.statement.ts
>type B = number;
^^^^
source.ts meta.type.declaration.ts storage.type.type.ts
^
source.ts meta.type.declaration.ts
^
source.ts meta.type.declaration.ts entity.name.type.alias.ts
^
source.ts meta.type.declaration.ts
^
source.ts meta.type.declaration.ts keyword.operator.assignment.ts
^
source.ts meta.type.declaration.ts
^^^^^^
source.ts meta.type.declaration.ts support.type.primitive.ts
^
source.ts punctuation.terminator.statement.ts
>function foo<T extends X>(arg: T): T extends B ? number : string {
^^^^^^^^
source.ts meta.function.ts storage.type.function.ts
^
source.ts meta.function.ts
^^^
source.ts meta.function.ts meta.definition.function.ts entity.name.function.ts
^
source.ts meta.function.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
^
source.ts meta.function.ts meta.type.parameters.ts entity.name.type.ts
^
source.ts meta.function.ts meta.type.parameters.ts
^^^^^^^
source.ts meta.function.ts meta.type.parameters.ts storage.modifier.ts
^
source.ts meta.function.ts meta.type.parameters.ts
^
source.ts meta.function.ts meta.type.parameters.ts entity.name.type.ts
^
source.ts meta.function.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
^
source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
^^^
source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
^
source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
^
source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
^
source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts entity.name.type.ts
^
source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
^
source.ts meta.function.ts meta.return.type.ts keyword.operator.type.annotation.ts
^
source.ts meta.function.ts meta.return.type.ts
^
source.ts meta.function.ts meta.return.type.ts entity.name.type.ts
^
source.ts meta.function.ts meta.return.type.ts
^^^^^^^
source.ts meta.function.ts meta.return.type.ts storage.modifier.ts
^
source.ts meta.function.ts meta.return.type.ts
^
source.ts meta.function.ts meta.return.type.ts entity.name.type.ts
^
source.ts meta.function.ts meta.return.type.ts
^
source.ts meta.function.ts meta.return.type.ts keyword.operator.ternary.ts
^
source.ts meta.function.ts meta.return.type.ts
^^^^^^
source.ts meta.function.ts meta.return.type.ts support.type.primitive.ts
^
source.ts meta.function.ts meta.return.type.ts
^
source.ts meta.function.ts meta.return.type.ts keyword.operator.ternary.ts
^
source.ts meta.function.ts meta.return.type.ts
^^^^^^
source.ts meta.function.ts meta.return.type.ts support.type.primitive.ts
^
source.ts meta.function.ts meta.return.type.ts
^
source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
> if (arg === "A") return <T extends B ? number : never>111;
^^
source.ts meta.function.ts meta.block.ts
^^
source.ts meta.function.ts meta.block.ts keyword.control.conditional.ts
^
source.ts meta.function.ts meta.block.ts
^
source.ts meta.function.ts meta.block.ts meta.brace.round.ts
^^^
source.ts meta.function.ts meta.block.ts variable.other.readwrite.ts
^
source.ts meta.function.ts meta.block.ts
^^^
source.ts meta.function.ts meta.block.ts keyword.operator.comparison.ts
^
source.ts meta.function.ts meta.block.ts
^
source.ts meta.function.ts meta.block.ts string.quoted.double.ts punctuation.definition.string.begin.ts
^
source.ts meta.function.ts meta.block.ts string.quoted.double.ts
^
source.ts meta.function.ts meta.block.ts string.quoted.double.ts punctuation.definition.string.end.ts
^
source.ts meta.function.ts meta.block.ts meta.brace.round.ts
^
source.ts meta.function.ts meta.block.ts
^^^^^^
source.ts meta.function.ts meta.block.ts keyword.control.flow.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts meta.brace.angle.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts entity.name.type.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^^^^^^^
source.ts meta.function.ts meta.block.ts cast.expr.ts storage.modifier.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts entity.name.type.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts keyword.operator.ternary.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^^^^^^
source.ts meta.function.ts meta.block.ts cast.expr.ts support.type.primitive.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts keyword.operator.ternary.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^^^^^
source.ts meta.function.ts meta.block.ts cast.expr.ts support.type.primitive.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts meta.brace.angle.ts
^^^
source.ts meta.function.ts meta.block.ts constant.numeric.decimal.ts
^
source.ts meta.function.ts meta.block.ts punctuation.terminator.statement.ts
> return <T extends B ? never : string>"returning a string";
^^
source.ts meta.function.ts meta.block.ts
^^^^^^
source.ts meta.function.ts meta.block.ts keyword.control.flow.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts meta.brace.angle.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts entity.name.type.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^^^^^^^
source.ts meta.function.ts meta.block.ts cast.expr.ts storage.modifier.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts entity.name.type.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts keyword.operator.ternary.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^^^^^
source.ts meta.function.ts meta.block.ts cast.expr.ts support.type.primitive.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts keyword.operator.ternary.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts
^^^^^^
source.ts meta.function.ts meta.block.ts cast.expr.ts support.type.primitive.ts
^
source.ts meta.function.ts meta.block.ts cast.expr.ts meta.brace.angle.ts
^
source.ts meta.function.ts meta.block.ts string.quoted.double.ts punctuation.definition.string.begin.ts
^^^^^^^^^^^^^^^^^^
source.ts meta.function.ts meta.block.ts string.quoted.double.ts
^
source.ts meta.function.ts meta.block.ts string.quoted.double.ts punctuation.definition.string.end.ts
^
source.ts meta.function.ts meta.block.ts punctuation.terminator.statement.ts
>}
^
source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
>foo("A");
^^^
source.ts meta.function-call.ts entity.name.function.ts
^
source.ts meta.brace.round.ts
^
source.ts string.quoted.double.ts punctuation.definition.string.begin.ts
^
source.ts string.quoted.double.ts
^
source.ts string.quoted.double.ts punctuation.definition.string.end.ts
^
source.ts meta.brace.round.ts
^
source.ts punctuation.terminator.statement.ts
>foo(1);
^^^
source.ts meta.function-call.ts entity.name.function.ts
^
source.ts meta.brace.round.ts
^
source.ts constant.numeric.decimal.ts
^
source.ts meta.brace.round.ts
^
source.ts punctuation.terminator.statement.ts
7 changes: 0 additions & 7 deletions tests/cases/Issue637.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
interface I {}

const goodHighlighting = <T extends I>(
arg: T
) => {
const a = arg
return a
}

const goodHighlighting2 = <
T
>(
Expand Down
7 changes: 7 additions & 0 deletions tests/cases/Issue637a.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// @onlyOwnGrammar - since this example has slightly different scopes because of how cast expression works
const goodHighlighting = <T extends I>(
arg: T
) => {
const a = arg
return a
}
7 changes: 7 additions & 0 deletions tests/cases/Issue637b.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// @onlyOwnGrammar - since this example has slightly different scopes because of how cast expression works and isnt supported in the tsx file
const goodHighlighting = <T extends I>(
arg: T
) => {
const a = arg
return a
}
10 changes: 10 additions & 0 deletions tests/cases/Issue748.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// @onlyOwnGrammar - As this has type assertion
type X = A | B;
type A = string;
type B = number;
function foo<T extends X>(arg: T): T extends B ? number : string {
if (arg === "A") return <T extends B ? number : never>111;
return <T extends B ? never : string>"returning a string";
}
foo("A");
foo(1);