Skip to content

Commit 1c5a0d1

Browse files
committed
Scope object literal keys
Addresses #23
1 parent fed8160 commit 1c5a0d1

13 files changed

+488
-104
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -933,10 +933,44 @@ repository:
933933
- include: '#comment'
934934
- include: '#method-declaration'
935935
- name: meta.object.member.ts
936-
begin: '[_$[:alpha:]][_$[:alnum:]]*\s*:'
936+
begin: (?=(?:(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*:)
937+
end: (?=,|\})
938+
patterns:
939+
- name: meta.object-literal.key.ts
940+
begin: \G(?<!:)
941+
end: ':'
942+
endCaptures:
943+
'0': { name: punctuation.separator.key-value.ts }
944+
patterns:
945+
- include: '#string'
946+
- include: '#array-literal'
947+
- include: '#expression'
948+
- name: meta.object.member.ts
949+
begin: (?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*(
950+
(async\s+)|(function\s+)|
951+
([_$[:alpha:]][_$[:alnum:]]*\s*=>)|
952+
(\([^()]*(\([^()]*\))*[^()]*(\([^()]*\))*[^()]*\)(\s*:\s*(.)*)?\s*=>)|
953+
(<[^<>]*(\<[^<>]+\>)*[^<>]*(\<[^<>]+\>)*[^<>]*>\s*\([^()]*(\([^()]*\))*[^()]*(\([^()]*\))*[^()]*\)(\s*:\s*(.)*)?\s*=>))))
954+
beginCaptures:
955+
'0': { name: meta.object-literal.key.ts }
956+
'1': { name: entity.name.function.ts }
957+
'2': { name: punctuation.separator.key-value.ts }
937958
end: (?=,|\})
938959
patterns:
939960
- include: '#expression'
961+
- name: meta.object.member.ts
962+
begin: ([_$[:alpha:]][_$[:alnum:]]*)\s*(:)
963+
beginCaptures:
964+
'0': { name: meta.object-literal.key.ts }
965+
'1': { name: entity.name.type.attribute-name.ts }
966+
'2': { name: punctuation.separator.key-value.ts }
967+
end: (?=,|\})
968+
patterns:
969+
- include: '#expression'
970+
- name: meta.object.member.ts
971+
match: ([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\})
972+
captures:
973+
'1': { name: variable.other.readwrite.ts }
940974

941975
expression-operator:
942976
patterns:

TypeScript.tmLanguage

Lines changed: 108 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2431,19 +2431,126 @@
24312431
</dict>
24322432
<dict>
24332433
<key>begin</key>
2434-
<string>[_$[:alpha:]][_$[:alnum:]]*\s*:</string>
2434+
<string>(?=(?:(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*:)</string>
24352435
<key>end</key>
24362436
<string>(?=,|\})</string>
24372437
<key>name</key>
24382438
<string>meta.object.member.ts</string>
24392439
<key>patterns</key>
24402440
<array>
2441+
<dict>
2442+
<key>begin</key>
2443+
<string>\G(?&lt;!:)</string>
2444+
<key>end</key>
2445+
<string>:</string>
2446+
<key>endCaptures</key>
2447+
<dict>
2448+
<key>0</key>
2449+
<dict>
2450+
<key>name</key>
2451+
<string>punctuation.separator.key-value.ts</string>
2452+
</dict>
2453+
</dict>
2454+
<key>name</key>
2455+
<string>meta.object-literal.key.ts</string>
2456+
<key>patterns</key>
2457+
<array>
2458+
<dict>
2459+
<key>include</key>
2460+
<string>#string</string>
2461+
</dict>
2462+
<dict>
2463+
<key>include</key>
2464+
<string>#array-literal</string>
2465+
</dict>
2466+
</array>
2467+
</dict>
24412468
<dict>
24422469
<key>include</key>
24432470
<string>#expression</string>
24442471
</dict>
24452472
</array>
24462473
</dict>
2474+
<dict>
2475+
<key>begin</key>
2476+
<string>(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*( (async\s+)|(function\s+)| ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)| (\([^()]*(\([^()]*\))*[^()]*(\([^()]*\))*[^()]*\)(\s*:\s*(.)*)?\s*=&gt;)| (&lt;[^&lt;&gt;]*(\&lt;[^&lt;&gt;]+\&gt;)*[^&lt;&gt;]*(\&lt;[^&lt;&gt;]+\&gt;)*[^&lt;&gt;]*&gt;\s*\([^()]*(\([^()]*\))*[^()]*(\([^()]*\))*[^()]*\)(\s*:\s*(.)*)?\s*=&gt;))))</string>
2477+
<key>beginCaptures</key>
2478+
<dict>
2479+
<key>0</key>
2480+
<dict>
2481+
<key>name</key>
2482+
<string>meta.object-literal.key.ts</string>
2483+
</dict>
2484+
<key>1</key>
2485+
<dict>
2486+
<key>name</key>
2487+
<string>entity.name.function.ts</string>
2488+
</dict>
2489+
<key>2</key>
2490+
<dict>
2491+
<key>name</key>
2492+
<string>punctuation.separator.key-value.ts</string>
2493+
</dict>
2494+
</dict>
2495+
<key>end</key>
2496+
<string>(?=,|\})</string>
2497+
<key>name</key>
2498+
<string>meta.object.member.ts</string>
2499+
<key>patterns</key>
2500+
<array>
2501+
<dict>
2502+
<key>include</key>
2503+
<string>#expression</string>
2504+
</dict>
2505+
</array>
2506+
</dict>
2507+
<dict>
2508+
<key>begin</key>
2509+
<string>([_$[:alpha:]][_$[:alnum:]]*)\s*(:)</string>
2510+
<key>beginCaptures</key>
2511+
<dict>
2512+
<key>0</key>
2513+
<dict>
2514+
<key>name</key>
2515+
<string>meta.object-literal.key.ts</string>
2516+
</dict>
2517+
<key>1</key>
2518+
<dict>
2519+
<key>name</key>
2520+
<string>entity.name.type.attribute-name.ts</string>
2521+
</dict>
2522+
<key>2</key>
2523+
<dict>
2524+
<key>name</key>
2525+
<string>punctuation.separator.key-value.ts</string>
2526+
</dict>
2527+
</dict>
2528+
<key>end</key>
2529+
<string>(?=,|\})</string>
2530+
<key>name</key>
2531+
<string>meta.object.member.ts</string>
2532+
<key>patterns</key>
2533+
<array>
2534+
<dict>
2535+
<key>include</key>
2536+
<string>#expression</string>
2537+
</dict>
2538+
</array>
2539+
</dict>
2540+
<dict>
2541+
<key>captures</key>
2542+
<dict>
2543+
<key>1</key>
2544+
<dict>
2545+
<key>name</key>
2546+
<string>variable.other.readwrite.ts</string>
2547+
</dict>
2548+
</dict>
2549+
<key>match</key>
2550+
<string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\})</string>
2551+
<key>name</key>
2552+
<string>meta.object.member.ts</string>
2553+
</dict>
24472554
</array>
24482555
</dict>
24492556
<key>operators</key>

TypeScriptReact.YAML-tmLanguage

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -922,10 +922,44 @@ repository:
922922
- include: '#comment'
923923
- include: '#method-declaration'
924924
- name: meta.object.member.tsx
925-
begin: '[_$[:alpha:]][_$[:alnum:]]*\s*:'
925+
begin: (?=(?:(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*:)
926+
end: (?=,|\})
927+
patterns:
928+
- name: meta.object-literal.key.tsx
929+
begin: \G(?<!:)
930+
end: ':'
931+
endCaptures:
932+
'0': { name: punctuation.separator.key-value.tsx }
933+
patterns:
934+
- include: '#string'
935+
- include: '#array-literal'
936+
- include: '#expression'
937+
- name: meta.object.member.tsx
938+
begin: (?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*(
939+
(async\s+)|(function\s+)|
940+
([_$[:alpha:]][_$[:alnum:]]*\s*=>)|
941+
(\([^()]*(\([^()]*\))*[^()]*(\([^()]*\))*[^()]*\)(\s*:\s*(.)*)?\s*=>)|
942+
(<[^<>]*(\<[^<>]+\>)*[^<>]*(\<[^<>]+\>)*[^<>]*>\s*\([^()]*(\([^()]*\))*[^()]*(\([^()]*\))*[^()]*\)(\s*:\s*(.)*)?\s*=>))))
943+
beginCaptures:
944+
'0': { name: meta.object-literal.key.tsx }
945+
'1': { name: entity.name.function.tsx }
946+
'2': { name: punctuation.separator.key-value.tsx }
926947
end: (?=,|\})
927948
patterns:
928949
- include: '#expression'
950+
- name: meta.object.member.tsx
951+
begin: ([_$[:alpha:]][_$[:alnum:]]*)\s*(:)
952+
beginCaptures:
953+
'0': { name: meta.object-literal.key.tsx }
954+
'1': { name: entity.name.type.attribute-name.tsx }
955+
'2': { name: punctuation.separator.key-value.tsx }
956+
end: (?=,|\})
957+
patterns:
958+
- include: '#expression'
959+
- name: meta.object.member.tsx
960+
match: ([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\})
961+
captures:
962+
'1': { name: variable.other.readwrite.tsx }
929963

930964
expression-operator:
931965
patterns:

TypeScriptReact.tmLanguage

Lines changed: 108 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2817,19 +2817,126 @@
28172817
</dict>
28182818
<dict>
28192819
<key>begin</key>
2820-
<string>[_$[:alpha:]][_$[:alnum:]]*\s*:</string>
2820+
<string>(?=(?:(?:\'[^']*\')|(?:\"[^"]*\")|(?:\[[^\]]*\]))\s*:)</string>
28212821
<key>end</key>
28222822
<string>(?=,|\})</string>
28232823
<key>name</key>
28242824
<string>meta.object.member.tsx</string>
28252825
<key>patterns</key>
28262826
<array>
2827+
<dict>
2828+
<key>begin</key>
2829+
<string>\G(?&lt;!:)</string>
2830+
<key>end</key>
2831+
<string>:</string>
2832+
<key>endCaptures</key>
2833+
<dict>
2834+
<key>0</key>
2835+
<dict>
2836+
<key>name</key>
2837+
<string>punctuation.separator.key-value.tsx</string>
2838+
</dict>
2839+
</dict>
2840+
<key>name</key>
2841+
<string>meta.object-literal.key.tsx</string>
2842+
<key>patterns</key>
2843+
<array>
2844+
<dict>
2845+
<key>include</key>
2846+
<string>#string</string>
2847+
</dict>
2848+
<dict>
2849+
<key>include</key>
2850+
<string>#array-literal</string>
2851+
</dict>
2852+
</array>
2853+
</dict>
28272854
<dict>
28282855
<key>include</key>
28292856
<string>#expression</string>
28302857
</dict>
28312858
</array>
28322859
</dict>
2860+
<dict>
2861+
<key>begin</key>
2862+
<string>(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\s*(:)(?=\s*( (async\s+)|(function\s+)| ([_$[:alpha:]][_$[:alnum:]]*\s*=&gt;)| (\([^()]*(\([^()]*\))*[^()]*(\([^()]*\))*[^()]*\)(\s*:\s*(.)*)?\s*=&gt;)| (&lt;[^&lt;&gt;]*(\&lt;[^&lt;&gt;]+\&gt;)*[^&lt;&gt;]*(\&lt;[^&lt;&gt;]+\&gt;)*[^&lt;&gt;]*&gt;\s*\([^()]*(\([^()]*\))*[^()]*(\([^()]*\))*[^()]*\)(\s*:\s*(.)*)?\s*=&gt;))))</string>
2863+
<key>beginCaptures</key>
2864+
<dict>
2865+
<key>0</key>
2866+
<dict>
2867+
<key>name</key>
2868+
<string>meta.object-literal.key.tsx</string>
2869+
</dict>
2870+
<key>1</key>
2871+
<dict>
2872+
<key>name</key>
2873+
<string>entity.name.function.tsx</string>
2874+
</dict>
2875+
<key>2</key>
2876+
<dict>
2877+
<key>name</key>
2878+
<string>punctuation.separator.key-value.tsx</string>
2879+
</dict>
2880+
</dict>
2881+
<key>end</key>
2882+
<string>(?=,|\})</string>
2883+
<key>name</key>
2884+
<string>meta.object.member.tsx</string>
2885+
<key>patterns</key>
2886+
<array>
2887+
<dict>
2888+
<key>include</key>
2889+
<string>#expression</string>
2890+
</dict>
2891+
</array>
2892+
</dict>
2893+
<dict>
2894+
<key>begin</key>
2895+
<string>([_$[:alpha:]][_$[:alnum:]]*)\s*(:)</string>
2896+
<key>beginCaptures</key>
2897+
<dict>
2898+
<key>0</key>
2899+
<dict>
2900+
<key>name</key>
2901+
<string>meta.object-literal.key.tsx</string>
2902+
</dict>
2903+
<key>1</key>
2904+
<dict>
2905+
<key>name</key>
2906+
<string>entity.name.type.attribute-name.tsx</string>
2907+
</dict>
2908+
<key>2</key>
2909+
<dict>
2910+
<key>name</key>
2911+
<string>punctuation.separator.key-value.tsx</string>
2912+
</dict>
2913+
</dict>
2914+
<key>end</key>
2915+
<string>(?=,|\})</string>
2916+
<key>name</key>
2917+
<string>meta.object.member.tsx</string>
2918+
<key>patterns</key>
2919+
<array>
2920+
<dict>
2921+
<key>include</key>
2922+
<string>#expression</string>
2923+
</dict>
2924+
</array>
2925+
</dict>
2926+
<dict>
2927+
<key>captures</key>
2928+
<dict>
2929+
<key>1</key>
2930+
<dict>
2931+
<key>name</key>
2932+
<string>variable.other.readwrite.tsx</string>
2933+
</dict>
2934+
</dict>
2935+
<key>match</key>
2936+
<string>([_$[:alpha:]][_$[:alnum:]]*)\s*(?=,|\})</string>
2937+
<key>name</key>
2938+
<string>meta.object.member.tsx</string>
2939+
</dict>
28332940
</array>
28342941
</dict>
28352942
<key>operators</key>

tests/baselines/ArrowFunctionInsideTypeAssertion.baseline.txt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,10 @@ function f(x: string | ((value: string) => number)) {
5050
> setTransform: <(domNode: HTMLElement, desiredValue: string) => void>null,
5151
^^^^
5252
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts
53-
^^^^^^^^^^^^^
54-
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts meta.object.member.ts
53+
^^^^^^^^^^^^
54+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts entity.name.type.attribute-name.ts
55+
^
56+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts punctuation.separator.key-value.ts
5557
^
5658
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts meta.object.member.ts cast.expr.ts
5759
^
@@ -91,8 +93,10 @@ function f(x: string | ((value: string) => number)) {
9193
> setDisplay: (domNode: HTMLElement, desiredValue: string) => {
9294
^^^^
9395
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts
94-
^^^^^^^^^^^
95-
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts meta.object.member.ts
96+
^^^^^^^^^^
97+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts entity.name.function.ts
98+
^
99+
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts meta.object.member.ts meta.object-literal.key.ts punctuation.separator.key-value.ts
96100
^
97101
source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.object-literal.ts meta.object.member.ts meta.arrow.ts
98102
^

0 commit comments

Comments
 (0)