Skip to content

Commit fdd598d

Browse files
authored
Support the app directives used in file-based programs (#337)
<img width="426" height="176" alt="image" src="https://github.com/user-attachments/assets/ecbb1438-f762-4947-9669-470f6a4c12bd" />
2 parents 6db5edb + 965478e commit fdd598d

File tree

5 files changed

+525
-2
lines changed

5 files changed

+525
-2
lines changed

grammars/csharp.tmLanguage

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8620,6 +8620,10 @@
86208620
<key>include</key>
86218621
<string>#preprocessor-pragma-checksum</string>
86228622
</dict>
8623+
<dict>
8624+
<key>include</key>
8625+
<string>#preprocessor-app-directive</string>
8626+
</dict>
86238627
</array>
86248628
</dict>
86258629
<key>preprocessor-define-or-undef</key>
@@ -8950,6 +8954,198 @@
89508954
</dict>
89518955
</dict>
89528956
</dict>
8957+
<key>preprocessor-app-directive</key>
8958+
<dict>
8959+
<key>begin</key>
8960+
<string>\s*(:)\s*</string>
8961+
<key>beginCaptures</key>
8962+
<dict>
8963+
<key>1</key>
8964+
<dict>
8965+
<key>name</key>
8966+
<string>punctuation.separator.colon.cs</string>
8967+
</dict>
8968+
</dict>
8969+
<key>end</key>
8970+
<string>(?=$)</string>
8971+
<key>patterns</key>
8972+
<array>
8973+
<dict>
8974+
<key>include</key>
8975+
<string>#preprocessor-app-directive-package</string>
8976+
</dict>
8977+
<dict>
8978+
<key>include</key>
8979+
<string>#preprocessor-app-directive-property</string>
8980+
</dict>
8981+
<dict>
8982+
<key>include</key>
8983+
<string>#preprocessor-app-directive-project</string>
8984+
</dict>
8985+
<dict>
8986+
<key>include</key>
8987+
<string>#preprocessor-app-directive-sdk</string>
8988+
</dict>
8989+
<dict>
8990+
<key>include</key>
8991+
<string>#preprocessor-app-directive-generic</string>
8992+
</dict>
8993+
</array>
8994+
</dict>
8995+
<key>preprocessor-app-directive-package</key>
8996+
<dict>
8997+
<key>match</key>
8998+
<string>\b(package)\b\s*([_[:alpha:]][_.[:alnum:]]*)?(@)?(.*)?\s*</string>
8999+
<key>captures</key>
9000+
<dict>
9001+
<key>1</key>
9002+
<dict>
9003+
<key>name</key>
9004+
<string>keyword.preprocessor.package.cs</string>
9005+
</dict>
9006+
<key>2</key>
9007+
<dict>
9008+
<key>patterns</key>
9009+
<array>
9010+
<dict>
9011+
<key>include</key>
9012+
<string>#preprocessor-app-directive-package-name</string>
9013+
</dict>
9014+
</array>
9015+
</dict>
9016+
<key>3</key>
9017+
<dict>
9018+
<key>name</key>
9019+
<string>punctuation.separator.at.cs</string>
9020+
</dict>
9021+
<key>4</key>
9022+
<dict>
9023+
<key>name</key>
9024+
<string>string.unquoted.preprocessor.message.cs</string>
9025+
</dict>
9026+
</dict>
9027+
</dict>
9028+
<key>preprocessor-app-directive-property</key>
9029+
<dict>
9030+
<key>match</key>
9031+
<string>\b(property)\b\s*([_[:alpha:]][_[:alnum:]]*)?(=)?(.*)?\s*</string>
9032+
<key>captures</key>
9033+
<dict>
9034+
<key>1</key>
9035+
<dict>
9036+
<key>name</key>
9037+
<string>keyword.preprocessor.property.cs</string>
9038+
</dict>
9039+
<key>2</key>
9040+
<dict>
9041+
<key>name</key>
9042+
<string>entity.name.variable.preprocessor.symbol.cs</string>
9043+
</dict>
9044+
<key>3</key>
9045+
<dict>
9046+
<key>name</key>
9047+
<string>punctuation.separator.equals.cs</string>
9048+
</dict>
9049+
<key>4</key>
9050+
<dict>
9051+
<key>name</key>
9052+
<string>string.unquoted.preprocessor.message.cs</string>
9053+
</dict>
9054+
</dict>
9055+
</dict>
9056+
<key>preprocessor-app-directive-project</key>
9057+
<dict>
9058+
<key>match</key>
9059+
<string>\b(project)\b\s*(.*)?\s*</string>
9060+
<key>captures</key>
9061+
<dict>
9062+
<key>1</key>
9063+
<dict>
9064+
<key>name</key>
9065+
<string>keyword.preprocessor.project.cs</string>
9066+
</dict>
9067+
<key>2</key>
9068+
<dict>
9069+
<key>name</key>
9070+
<string>string.unquoted.preprocessor.message.cs</string>
9071+
</dict>
9072+
</dict>
9073+
</dict>
9074+
<key>preprocessor-app-directive-sdk</key>
9075+
<dict>
9076+
<key>match</key>
9077+
<string>\b(sdk)\b\s*([_[:alpha:]][_.[:alnum:]]*)?(@)?(.*)?\s*</string>
9078+
<key>captures</key>
9079+
<dict>
9080+
<key>1</key>
9081+
<dict>
9082+
<key>name</key>
9083+
<string>keyword.preprocessor.sdk.cs</string>
9084+
</dict>
9085+
<key>2</key>
9086+
<dict>
9087+
<key>patterns</key>
9088+
<array>
9089+
<dict>
9090+
<key>include</key>
9091+
<string>#preprocessor-app-directive-package-name</string>
9092+
</dict>
9093+
</array>
9094+
</dict>
9095+
<key>3</key>
9096+
<dict>
9097+
<key>name</key>
9098+
<string>punctuation.separator.at.cs</string>
9099+
</dict>
9100+
<key>4</key>
9101+
<dict>
9102+
<key>name</key>
9103+
<string>string.unquoted.preprocessor.message.cs</string>
9104+
</dict>
9105+
</dict>
9106+
</dict>
9107+
<key>preprocessor-app-directive-package-name</key>
9108+
<dict>
9109+
<key>patterns</key>
9110+
<array>
9111+
<dict>
9112+
<key>match</key>
9113+
<string>(\.)([_[:alpha:]][_[:alnum:]]*)</string>
9114+
<key>captures</key>
9115+
<dict>
9116+
<key>1</key>
9117+
<dict>
9118+
<key>name</key>
9119+
<string>punctuation.dot.cs</string>
9120+
</dict>
9121+
<key>2</key>
9122+
<dict>
9123+
<key>name</key>
9124+
<string>entity.name.variable.preprocessor.symbol.cs</string>
9125+
</dict>
9126+
</dict>
9127+
</dict>
9128+
<dict>
9129+
<key>name</key>
9130+
<string>entity.name.variable.preprocessor.symbol.cs</string>
9131+
<key>match</key>
9132+
<string>[_[:alpha:]][_[:alnum:]]*</string>
9133+
</dict>
9134+
</array>
9135+
</dict>
9136+
<key>preprocessor-app-directive-generic</key>
9137+
<dict>
9138+
<key>match</key>
9139+
<string>\b(.*)?\s*</string>
9140+
<key>captures</key>
9141+
<dict>
9142+
<key>1</key>
9143+
<dict>
9144+
<key>name</key>
9145+
<string>string.unquoted.preprocessor.message.cs</string>
9146+
</dict>
9147+
</dict>
9148+
</dict>
89539149
<key>preprocessor-expression</key>
89549150
<dict>
89559151
<key>patterns</key>

grammars/csharp.tmLanguage.cson

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5201,6 +5201,9 @@ repository:
52015201
{
52025202
include: "#preprocessor-pragma-checksum"
52035203
}
5204+
{
5205+
include: "#preprocessor-app-directive"
5206+
}
52045207
]
52055208
"preprocessor-define-or-undef":
52065209
match: "\\b(?:(define)|(undef))\\b\\s*\\b([_[:alpha:]][_[:alnum:]]*)\\b"
@@ -5347,6 +5350,97 @@ repository:
53475350
name: "string.quoted.double.cs"
53485351
"5":
53495352
name: "string.quoted.double.cs"
5353+
"preprocessor-app-directive":
5354+
begin: "\\s*(:)\\s*"
5355+
beginCaptures:
5356+
"1":
5357+
name: "punctuation.separator.colon.cs"
5358+
end: "(?=$)"
5359+
patterns: [
5360+
{
5361+
include: "#preprocessor-app-directive-package"
5362+
}
5363+
{
5364+
include: "#preprocessor-app-directive-property"
5365+
}
5366+
{
5367+
include: "#preprocessor-app-directive-project"
5368+
}
5369+
{
5370+
include: "#preprocessor-app-directive-sdk"
5371+
}
5372+
{
5373+
include: "#preprocessor-app-directive-generic"
5374+
}
5375+
]
5376+
"preprocessor-app-directive-package":
5377+
match: "\\b(package)\\b\\s*([_[:alpha:]][_.[:alnum:]]*)?(@)?(.*)?\\s*"
5378+
captures:
5379+
"1":
5380+
name: "keyword.preprocessor.package.cs"
5381+
"2":
5382+
patterns: [
5383+
{
5384+
include: "#preprocessor-app-directive-package-name"
5385+
}
5386+
]
5387+
"3":
5388+
name: "punctuation.separator.at.cs"
5389+
"4":
5390+
name: "string.unquoted.preprocessor.message.cs"
5391+
"preprocessor-app-directive-property":
5392+
match: "\\b(property)\\b\\s*([_[:alpha:]][_[:alnum:]]*)?(=)?(.*)?\\s*"
5393+
captures:
5394+
"1":
5395+
name: "keyword.preprocessor.property.cs"
5396+
"2":
5397+
name: "entity.name.variable.preprocessor.symbol.cs"
5398+
"3":
5399+
name: "punctuation.separator.equals.cs"
5400+
"4":
5401+
name: "string.unquoted.preprocessor.message.cs"
5402+
"preprocessor-app-directive-project":
5403+
match: "\\b(project)\\b\\s*(.*)?\\s*"
5404+
captures:
5405+
"1":
5406+
name: "keyword.preprocessor.project.cs"
5407+
"2":
5408+
name: "string.unquoted.preprocessor.message.cs"
5409+
"preprocessor-app-directive-sdk":
5410+
match: "\\b(sdk)\\b\\s*([_[:alpha:]][_.[:alnum:]]*)?(@)?(.*)?\\s*"
5411+
captures:
5412+
"1":
5413+
name: "keyword.preprocessor.sdk.cs"
5414+
"2":
5415+
patterns: [
5416+
{
5417+
include: "#preprocessor-app-directive-package-name"
5418+
}
5419+
]
5420+
"3":
5421+
name: "punctuation.separator.at.cs"
5422+
"4":
5423+
name: "string.unquoted.preprocessor.message.cs"
5424+
"preprocessor-app-directive-package-name":
5425+
patterns: [
5426+
{
5427+
match: "(\\.)([_[:alpha:]][_[:alnum:]]*)"
5428+
captures:
5429+
"1":
5430+
name: "punctuation.dot.cs"
5431+
"2":
5432+
name: "entity.name.variable.preprocessor.symbol.cs"
5433+
}
5434+
{
5435+
name: "entity.name.variable.preprocessor.symbol.cs"
5436+
match: "[_[:alpha:]][_[:alnum:]]*"
5437+
}
5438+
]
5439+
"preprocessor-app-directive-generic":
5440+
match: "\\b(.*)?\\s*"
5441+
captures:
5442+
"1":
5443+
name: "string.unquoted.preprocessor.message.cs"
53505444
"preprocessor-expression":
53515445
patterns: [
53525446
{

src/csharp.tmLanguage.yml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3388,6 +3388,7 @@ repository:
33883388
- include: '#preprocessor-line'
33893389
- include: '#preprocessor-pragma-warning'
33903390
- include: '#preprocessor-pragma-checksum'
3391+
- include: '#preprocessor-app-directive'
33913392

33923393
preprocessor-define-or-undef:
33933394
match: \b(?:(define)|(undef))\b\s*\b([_[:alpha:]][_[:alnum:]]*)\b
@@ -3490,6 +3491,66 @@ repository:
34903491
'4': { name: string.quoted.double.cs }
34913492
'5': { name: string.quoted.double.cs }
34923493

3494+
preprocessor-app-directive:
3495+
begin: \s*(:)\s*
3496+
beginCaptures:
3497+
'1': { name: punctuation.separator.colon.cs }
3498+
end: (?=$)
3499+
patterns:
3500+
- include: '#preprocessor-app-directive-package'
3501+
- include: '#preprocessor-app-directive-property'
3502+
- include: '#preprocessor-app-directive-project'
3503+
- include: '#preprocessor-app-directive-sdk'
3504+
- include: '#preprocessor-app-directive-generic'
3505+
3506+
preprocessor-app-directive-package:
3507+
match: \b(package)\b\s*([_[:alpha:]][_.[:alnum:]]*)?(@)?(.*)?\s*
3508+
captures:
3509+
'1': { name: keyword.preprocessor.package.cs }
3510+
'2':
3511+
patterns:
3512+
- include: '#preprocessor-app-directive-package-name'
3513+
'3': { name: punctuation.separator.at.cs }
3514+
'4': { name: string.unquoted.preprocessor.message.cs }
3515+
3516+
preprocessor-app-directive-property:
3517+
match: \b(property)\b\s*([_[:alpha:]][_[:alnum:]]*)?(=)?(.*)?\s*
3518+
captures:
3519+
'1': { name: keyword.preprocessor.property.cs }
3520+
'2': { name: entity.name.variable.preprocessor.symbol.cs }
3521+
'3': { name: punctuation.separator.equals.cs }
3522+
'4': { name: string.unquoted.preprocessor.message.cs }
3523+
3524+
preprocessor-app-directive-project:
3525+
match: \b(project)\b\s*(.*)?\s*
3526+
captures:
3527+
'1': { name: keyword.preprocessor.project.cs }
3528+
'2': { name: string.unquoted.preprocessor.message.cs }
3529+
3530+
preprocessor-app-directive-sdk:
3531+
match: \b(sdk)\b\s*([_[:alpha:]][_.[:alnum:]]*)?(@)?(.*)?\s*
3532+
captures:
3533+
'1': { name: keyword.preprocessor.sdk.cs }
3534+
'2':
3535+
patterns:
3536+
- include: '#preprocessor-app-directive-package-name'
3537+
'3': { name: punctuation.separator.at.cs }
3538+
'4': { name: string.unquoted.preprocessor.message.cs }
3539+
3540+
preprocessor-app-directive-package-name:
3541+
patterns:
3542+
- match: (\.)([_[:alpha:]][_[:alnum:]]*)
3543+
captures:
3544+
'1': { name: punctuation.dot.cs }
3545+
'2': { name: entity.name.variable.preprocessor.symbol.cs }
3546+
- name: entity.name.variable.preprocessor.symbol.cs
3547+
match: '[_[:alpha:]][_[:alnum:]]*'
3548+
3549+
preprocessor-app-directive-generic:
3550+
match: \b(.*)?\s*
3551+
captures:
3552+
'1': { name: string.unquoted.preprocessor.message.cs }
3553+
34933554
preprocessor-expression:
34943555
patterns:
34953556
- begin: \(

0 commit comments

Comments
 (0)