Skip to content

Commit f0633d8

Browse files
committed
Support for parameter destructuring
1 parent 35731c0 commit f0633d8

File tree

6 files changed

+1433
-4
lines changed

6 files changed

+1433
-4
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,13 +579,82 @@ repository:
579579
- include: '#object-member'
580580

581581
parameter-name:
582-
match: '(?:\s*\b(public|private|protected)\b\s+)?(\.\.\.)?\s*([a-zA-Z_$][\w$]*)\s*(\??)'
582+
match: '(?:\s*\b(public|private|protected)\b\s+)?(\.\.\.)?\s*(?<!=|:)([a-zA-Z_$][\w$]*)\s*(\??)'
583583
captures:
584584
'1': { name: storage.modifier.ts }
585585
'2': { name: keyword.operator.spread.ts }
586586
'3': { name: variable.parameter.ts }
587587
'4': { name: keyword.operator.optional.ts }
588588

589+
destructuring-parameter:
590+
patterns:
591+
- name: meta.parameter.object-binding-pattern.ts
592+
begin: (?<!=|:)\s*(\{)
593+
beginCaptures:
594+
'1': { name: punctuation.definition.binding-pattern.object.ts }
595+
end: \}
596+
endCaptures:
597+
'0': { name: punctuation.definition.binding-pattern.object.ts }
598+
patterns:
599+
- include: '#parameter-object-binding-element'
600+
- name: meta.paramter.array-binding-pattern.ts
601+
begin: (?<!=|:)\s*(\[)
602+
beginCaptures:
603+
'1': { name: punctuation.definition.binding-pattern.array.ts }
604+
end: \]
605+
endCaptures:
606+
'0': { name: punctuation.definition.binding-pattern.array.ts }
607+
patterns:
608+
- include: '#parameter-array-binding-element'
609+
610+
parameter-object-binding-element:
611+
patterns:
612+
- include: '#comment'
613+
- begin: \b([a-zA-Z_$][\w$]*)\s*(:)
614+
beginCaptures:
615+
'1': { name: variable.object.property.ts }
616+
'2': { name: punctuation.destructuring.ts }
617+
end: (?=,|\})
618+
patterns:
619+
- include: '#parameter-object-binding-pattern'
620+
- include: '#parameter-array-binding-pattern'
621+
- name: variable.parameter.ts
622+
match: \b([a-zA-Z_$][\w$]*)\b
623+
- name: variable.parameter.ts
624+
match: \b([a-zA-Z_$][\w$]*)\b
625+
- name: meta.delimiter.object.comma.ts
626+
match: ','
627+
628+
parameter-array-binding-element:
629+
patterns:
630+
- include: '#comment'
631+
- include: '#parameter-object-binding-pattern'
632+
- include: '#parameter-array-binding-pattern'
633+
- name: variable.parameter.ts
634+
match: \b([a-zA-Z_$][\w$]*)\b
635+
- name: meta.delimiter.object.comma.ts
636+
match: ','
637+
638+
parameter-object-binding-pattern:
639+
begin: \{
640+
beginCaptures:
641+
'0': { name: punctuation.definition.binding-pattern.object.ts }
642+
end: \}
643+
endCaptures:
644+
'0': { name: punctuation.definition.binding-pattern.object.ts }
645+
patterns:
646+
- include: '#parameter-object-binding-element'
647+
648+
parameter-array-binding-pattern:
649+
begin: \[
650+
beginCaptures:
651+
'0': { name: punctuation.definition.binding-pattern.array.ts }
652+
end: \]
653+
endCaptures:
654+
'0': { name: punctuation.definition.binding-pattern.array.ts }
655+
patterns:
656+
- include: '#parameter-array-binding-element'
657+
589658
return-type:
590659
name: meta.return.type.ts
591660
begin: '(?<=\))\s*:'
@@ -635,6 +704,7 @@ repository:
635704
'0': { name: punctuation.definition.parameters.end.ts }
636705
patterns:
637706
- include: '#comment'
707+
- include: '#destructuring-parameter'
638708
- include: '#parameter-name'
639709
- include: '#type-annotation'
640710
- include: '#variable-initializer'

TypeScript.tmLanguage

Lines changed: 221 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,74 @@
667667
</dict>
668668
</array>
669669
</dict>
670+
<key>destructuring-parameter</key>
671+
<dict>
672+
<key>patterns</key>
673+
<array>
674+
<dict>
675+
<key>begin</key>
676+
<string>(?&lt;!=|:)\s*(\{)</string>
677+
<key>beginCaptures</key>
678+
<dict>
679+
<key>1</key>
680+
<dict>
681+
<key>name</key>
682+
<string>punctuation.definition.binding-pattern.object.ts</string>
683+
</dict>
684+
</dict>
685+
<key>end</key>
686+
<string>\}</string>
687+
<key>endCaptures</key>
688+
<dict>
689+
<key>0</key>
690+
<dict>
691+
<key>name</key>
692+
<string>punctuation.definition.binding-pattern.object.ts</string>
693+
</dict>
694+
</dict>
695+
<key>name</key>
696+
<string>meta.parameter.object-binding-pattern.ts</string>
697+
<key>patterns</key>
698+
<array>
699+
<dict>
700+
<key>include</key>
701+
<string>#parameter-object-binding-element</string>
702+
</dict>
703+
</array>
704+
</dict>
705+
<dict>
706+
<key>begin</key>
707+
<string>(?&lt;!=|:)\s*(\[)</string>
708+
<key>beginCaptures</key>
709+
<dict>
710+
<key>1</key>
711+
<dict>
712+
<key>name</key>
713+
<string>punctuation.definition.binding-pattern.array.ts</string>
714+
</dict>
715+
</dict>
716+
<key>end</key>
717+
<string>\]</string>
718+
<key>endCaptures</key>
719+
<dict>
720+
<key>0</key>
721+
<dict>
722+
<key>name</key>
723+
<string>punctuation.definition.binding-pattern.array.ts</string>
724+
</dict>
725+
</dict>
726+
<key>name</key>
727+
<string>meta.paramter.array-binding-pattern.ts</string>
728+
<key>patterns</key>
729+
<array>
730+
<dict>
731+
<key>include</key>
732+
<string>#parameter-array-binding-element</string>
733+
</dict>
734+
</array>
735+
</dict>
736+
</array>
737+
</dict>
670738
<key>destructuring-variable</key>
671739
<dict>
672740
<key>patterns</key>
@@ -1325,6 +1393,10 @@
13251393
<key>include</key>
13261394
<string>#comment</string>
13271395
</dict>
1396+
<dict>
1397+
<key>include</key>
1398+
<string>#destructuring-parameter</string>
1399+
</dict>
13281400
<dict>
13291401
<key>include</key>
13301402
<string>#parameter-name</string>
@@ -2236,6 +2308,66 @@
22362308
</dict>
22372309
</array>
22382310
</dict>
2311+
<key>parameter-array-binding-element</key>
2312+
<dict>
2313+
<key>patterns</key>
2314+
<array>
2315+
<dict>
2316+
<key>include</key>
2317+
<string>#comment</string>
2318+
</dict>
2319+
<dict>
2320+
<key>include</key>
2321+
<string>#parameter-object-binding-pattern</string>
2322+
</dict>
2323+
<dict>
2324+
<key>include</key>
2325+
<string>#parameter-array-binding-pattern</string>
2326+
</dict>
2327+
<dict>
2328+
<key>match</key>
2329+
<string>\b([a-zA-Z_$][\w$]*)\b</string>
2330+
<key>name</key>
2331+
<string>variable.parameter.ts</string>
2332+
</dict>
2333+
<dict>
2334+
<key>match</key>
2335+
<string>,</string>
2336+
<key>name</key>
2337+
<string>meta.delimiter.object.comma.ts</string>
2338+
</dict>
2339+
</array>
2340+
</dict>
2341+
<key>parameter-array-binding-pattern</key>
2342+
<dict>
2343+
<key>begin</key>
2344+
<string>\[</string>
2345+
<key>beginCaptures</key>
2346+
<dict>
2347+
<key>0</key>
2348+
<dict>
2349+
<key>name</key>
2350+
<string>punctuation.definition.binding-pattern.array.ts</string>
2351+
</dict>
2352+
</dict>
2353+
<key>end</key>
2354+
<string>\]</string>
2355+
<key>endCaptures</key>
2356+
<dict>
2357+
<key>0</key>
2358+
<dict>
2359+
<key>name</key>
2360+
<string>punctuation.definition.binding-pattern.array.ts</string>
2361+
</dict>
2362+
</dict>
2363+
<key>patterns</key>
2364+
<array>
2365+
<dict>
2366+
<key>include</key>
2367+
<string>#parameter-array-binding-element</string>
2368+
</dict>
2369+
</array>
2370+
</dict>
22392371
<key>parameter-name</key>
22402372
<dict>
22412373
<key>captures</key>
@@ -2262,7 +2394,95 @@
22622394
</dict>
22632395
</dict>
22642396
<key>match</key>
2265-
<string>(?:\s*\b(public|private|protected)\b\s+)?(\.\.\.)?\s*([a-zA-Z_$][\w$]*)\s*(\??)</string>
2397+
<string>(?:\s*\b(public|private|protected)\b\s+)?(\.\.\.)?\s*(?&lt;!=|:)([a-zA-Z_$][\w$]*)\s*(\??)</string>
2398+
</dict>
2399+
<key>parameter-object-binding-element</key>
2400+
<dict>
2401+
<key>patterns</key>
2402+
<array>
2403+
<dict>
2404+
<key>include</key>
2405+
<string>#comment</string>
2406+
</dict>
2407+
<dict>
2408+
<key>begin</key>
2409+
<string>\b([a-zA-Z_$][\w$]*)\s*(:)</string>
2410+
<key>beginCaptures</key>
2411+
<dict>
2412+
<key>1</key>
2413+
<dict>
2414+
<key>name</key>
2415+
<string>variable.object.property.ts</string>
2416+
</dict>
2417+
<key>2</key>
2418+
<dict>
2419+
<key>name</key>
2420+
<string>punctuation.destructuring.ts</string>
2421+
</dict>
2422+
</dict>
2423+
<key>end</key>
2424+
<string>(?=,|\})</string>
2425+
<key>patterns</key>
2426+
<array>
2427+
<dict>
2428+
<key>include</key>
2429+
<string>#parameter-object-binding-pattern</string>
2430+
</dict>
2431+
<dict>
2432+
<key>include</key>
2433+
<string>#parameter-array-binding-pattern</string>
2434+
</dict>
2435+
<dict>
2436+
<key>match</key>
2437+
<string>\b([a-zA-Z_$][\w$]*)\b</string>
2438+
<key>name</key>
2439+
<string>variable.parameter.ts</string>
2440+
</dict>
2441+
</array>
2442+
</dict>
2443+
<dict>
2444+
<key>match</key>
2445+
<string>\b([a-zA-Z_$][\w$]*)\b</string>
2446+
<key>name</key>
2447+
<string>variable.parameter.ts</string>
2448+
</dict>
2449+
<dict>
2450+
<key>match</key>
2451+
<string>,</string>
2452+
<key>name</key>
2453+
<string>meta.delimiter.object.comma.ts</string>
2454+
</dict>
2455+
</array>
2456+
</dict>
2457+
<key>parameter-object-binding-pattern</key>
2458+
<dict>
2459+
<key>begin</key>
2460+
<string>\{</string>
2461+
<key>beginCaptures</key>
2462+
<dict>
2463+
<key>0</key>
2464+
<dict>
2465+
<key>name</key>
2466+
<string>punctuation.definition.binding-pattern.object.ts</string>
2467+
</dict>
2468+
</dict>
2469+
<key>end</key>
2470+
<string>\}</string>
2471+
<key>endCaptures</key>
2472+
<dict>
2473+
<key>0</key>
2474+
<dict>
2475+
<key>name</key>
2476+
<string>punctuation.definition.binding-pattern.object.ts</string>
2477+
</dict>
2478+
</dict>
2479+
<key>patterns</key>
2480+
<array>
2481+
<dict>
2482+
<key>include</key>
2483+
<string>#parameter-object-binding-element</string>
2484+
</dict>
2485+
</array>
22662486
</dict>
22672487
<key>paren-expression</key>
22682488
<dict>

0 commit comments

Comments
 (0)