@@ -2332,8 +2332,8 @@ repository:
23322332 - include : ' #type-parameters'
23332333 - include : ' #type-tuple'
23342334 - include : ' #type-object'
2335- - include : ' #type-conditional'
23362335 - include : ' #type-operators'
2336+ - include : ' #type-conditional'
23372337 - include : ' #type-fn-type-parameters'
23382338 - include : ' #type-paren-or-function-parameters'
23392339 - include : ' #type-function-return-type'
@@ -2519,6 +2519,7 @@ repository:
25192519 type-operators :
25202520 patterns :
25212521 - include : ' #typeof-operator'
2522+ - include : ' #type-infer'
25222523 # Handle the object types followed by | or & operator as { can be used as end of Type in many places and this avoids tripping that
25232524 - begin : ([&|])(?=\s*\{)
25242525 beginCaptures :
@@ -2536,11 +2537,30 @@ repository:
25362537 match : ' {{startOfIdentifier}}keyof{{endOfIdentifier}}'
25372538 - name : keyword.operator.ternary.ts
25382539 match : (\?|\:)
2539- - name : keyword.operator.expression.infer.ts
2540- match : ' {{startOfIdentifier}}infer(?=\s+[_$[:alpha:]])'
25412540 - name : keyword.operator.expression.import.ts
25422541 match : ' {{startOfIdentifier}}import(?=\s*\()'
25432542
2543+ type-infer :
2544+ patterns :
2545+ # try to match infer..extends on a single line
2546+ - match : ' {{startOfIdentifier}}(infer)\s+({{identifier}})\s+(extends){{endOfIdentifier}}'
2547+ name : meta.type.infer.ts
2548+ captures :
2549+ ' 1 ' : { name: keyword.operator.expression.infer.ts }
2550+ ' 2 ' : { name: entity.name.type.ts }
2551+ ' 3 ' : { name: keyword.operator.expression.extends.ts }
2552+ # alternatively, match across multiple lines
2553+ - begin : ' {{startOfIdentifier}}infer(?=\s+[_$[:alpha:]])'
2554+ beginCaptures :
2555+ ' 0 ' : { name: keyword.operator.expression.infer.ts }
2556+ end : ' (?={{lookAheadEndOfType}}|['' "`|&])'
2557+ name : meta.type.infer.ts
2558+ patterns :
2559+ - name : keyword.operator.expression.extends.ts
2560+ match : ' {{startOfIdentifier}}extends{{endOfIdentifier}}'
2561+ - name : entity.name.type.ts
2562+ match : ' {{startOfIdentifier}}{{identifier}}{{endOfIdentifier}}'
2563+
25442564 type-predicate-operator :
25452565 patterns :
25462566 - match : ' {{startOfIdentifier}}(?:(asserts)\s+)?(?!asserts)(?:(this)|({{identifier}}))\s(is){{endOfIdentifier}}'
0 commit comments