online-compiler-widget 0.0.3 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/dist/abap-CrvW7_qN.js +1398 -0
  2. package/dist/apex-BAOI8p1v.js +327 -0
  3. package/dist/assets/css.worker-Cb0JI69t.js +93 -0
  4. package/dist/assets/html.worker-BNFZMwEc.js +470 -0
  5. package/dist/assets/json.worker-BCybXpia.js +58 -0
  6. package/dist/assets/ts.worker-DAVh1bw1.js +67731 -0
  7. package/dist/azcli-BlCk_UqW.js +68 -0
  8. package/dist/bat-DPoEelVx.js +100 -0
  9. package/dist/bicep-Cp1F394l.js +102 -0
  10. package/dist/cameligo-CWqtSlQs.js +174 -0
  11. package/dist/clojure-CKBp32Gf.js +761 -0
  12. package/dist/coffee-CDo6vc-J.js +232 -0
  13. package/dist/cpp-DokufPgf.js +389 -0
  14. package/dist/csharp-BQi3szM0.js +326 -0
  15. package/dist/csp-BSGtCCZ-.js +53 -0
  16. package/dist/css-DEPFDJfb.js +187 -0
  17. package/dist/cssMode-nHrB9Mnr.js +141 -0
  18. package/dist/cypher-DAb1vOxS.js +263 -0
  19. package/dist/dart-C8p4jewR.js +281 -0
  20. package/dist/dockerfile-DP0iLFPN.js +130 -0
  21. package/dist/ecl-BDQHA6fi.js +456 -0
  22. package/dist/elixir-D4II6kDM.js +569 -0
  23. package/dist/flow9-StcnL-VB.js +142 -0
  24. package/dist/freemarker2-BoiXdkJM.js +982 -0
  25. package/dist/fsharp-DdUVp3EN.js +217 -0
  26. package/dist/go-D1-I258M.js +218 -0
  27. package/dist/graphql-DWkL3f8U.js +151 -0
  28. package/dist/handlebars-C7PJzkmo.js +412 -0
  29. package/dist/hcl-D_0MNifv.js +183 -0
  30. package/dist/html-D_xe_tUa.js +301 -0
  31. package/dist/htmlMode-Dk_luXu_.js +152 -0
  32. package/dist/index-Ds0EJmOd.js +129200 -0
  33. package/dist/index.js +14 -0
  34. package/dist/ini-C4I2-MT7.js +71 -0
  35. package/dist/java-OBvaP_SS.js +232 -0
  36. package/dist/javascript-CUK67ITD.js +70 -0
  37. package/dist/jsonMode-BIAYTpVF.js +569 -0
  38. package/dist/julia-BmDH8Kkf.js +511 -0
  39. package/dist/kotlin-Dhu5AGOD.js +252 -0
  40. package/dist/less-CzmjXREq.js +162 -0
  41. package/dist/lexon-CV2c4pN9.js +157 -0
  42. package/dist/liquid-Cgsk8EmK.js +233 -0
  43. package/dist/lspLanguageFeatures-HqO1l9Me.js +1458 -0
  44. package/dist/lua-CFY5U8qF.js +162 -0
  45. package/dist/m3-BL_AnZVh.js +210 -0
  46. package/dist/markdown-CWKQPXCv.js +229 -0
  47. package/dist/mdx-QboWmT4M.js +158 -0
  48. package/dist/mips-ButYmJ5E.js +198 -0
  49. package/dist/msdax-C3cnXqDh.js +375 -0
  50. package/dist/mysql-YlSHaf6G.js +878 -0
  51. package/dist/objective-c-Dwnlproe.js +183 -0
  52. package/dist/pascal-UzGbSWEN.js +251 -0
  53. package/dist/pascaligo-CslTgu68.js +164 -0
  54. package/dist/perl-oj6r_mgw.js +626 -0
  55. package/dist/pgsql-DSBO0Mev.js +851 -0
  56. package/dist/php-YzCD--7j.js +500 -0
  57. package/dist/pla-CmylB8vQ.js +137 -0
  58. package/dist/postiats-CLFW5gNY.js +907 -0
  59. package/dist/powerquery-CmOWUvlh.js +890 -0
  60. package/dist/powershell-fHQcmBLK.js +239 -0
  61. package/dist/protobuf-p5BArb-9.js +420 -0
  62. package/dist/pug-gVdUDvqf.js +402 -0
  63. package/dist/python-kIZaMFF7.js +294 -0
  64. package/dist/qsharp-DnrWSUlt.js +301 -0
  65. package/dist/r-Cv309K2z.js +243 -0
  66. package/dist/razor-ms2cCMGp.js +543 -0
  67. package/dist/redis-DTcS4wMj.js +302 -0
  68. package/dist/redshift-hLxZVESM.js +809 -0
  69. package/dist/restructuredtext-C898lK4f.js +174 -0
  70. package/dist/ruby-CgKtnJIQ.js +511 -0
  71. package/dist/rust-bj8oxVnh.js +343 -0
  72. package/dist/sb-DWynz26l.js +115 -0
  73. package/dist/scala-BL5z1UEd.js +370 -0
  74. package/dist/scheme-DUJsH6VU.js +108 -0
  75. package/dist/scss-CxjmhvaL.js +262 -0
  76. package/dist/shell-D14Zs1dF.js +221 -0
  77. package/dist/solidity-WyRm-BGK.js +1367 -0
  78. package/dist/sophia-CKk-_Oa5.js +199 -0
  79. package/dist/sparql-DHtmINMZ.js +201 -0
  80. package/dist/sql-Dqaj5JHC.js +853 -0
  81. package/dist/st-Bj2IIaop.js +416 -0
  82. package/dist/style.css +1 -0
  83. package/dist/swift-DwxP72iM.js +312 -0
  84. package/dist/systemverilog-D7wJfuql.js +576 -0
  85. package/dist/tcl-0ApMt-eC.js +232 -0
  86. package/dist/tsMode-BiXWAJYS.js +946 -0
  87. package/dist/twig-DxwbdmvQ.js +392 -0
  88. package/dist/typescript-ByMmjZ38.js +336 -0
  89. package/dist/typespec-Fd-JwSuS.js +117 -0
  90. package/dist/vb-CxuyYE1I.js +372 -0
  91. package/dist/wgsl-DoEGc31J.js +439 -0
  92. package/dist/xml-iOXTZgNN.js +88 -0
  93. package/dist/yaml-RRlyy-QW.js +199 -0
  94. package/package.json +41 -36
  95. package/FileStorage/obj/FileStorage.csproj.EntityFrameworkCore.targets +0 -28
  96. package/README.md +0 -1
  97. package/eslint.config.js +0 -26
  98. package/index.html +0 -13
  99. package/index.tsx +0 -3
  100. package/openapitools.json +0 -7
  101. package/pnpm-workspace.yaml +0 -2
  102. package/public/vite.svg +0 -1
  103. package/src/App.css +0 -49
  104. package/src/App.tsx +0 -84
  105. package/src/api/.openapi-generator/FILES +0 -25
  106. package/src/api/.openapi-generator/VERSION +0 -1
  107. package/src/api/.openapi-generator-ignore +0 -23
  108. package/src/api/api.ts +0 -1312
  109. package/src/api/base.ts +0 -62
  110. package/src/api/common.ts +0 -113
  111. package/src/api/configuration.ts +0 -121
  112. package/src/api/docs/CompilationError.md +0 -26
  113. package/src/api/docs/CompileRequest.md +0 -22
  114. package/src/api/docs/CompileResult.md +0 -28
  115. package/src/api/docs/CompilerApi.md +0 -263
  116. package/src/api/docs/CreateFileDto.md +0 -22
  117. package/src/api/docs/CreateProjectRequest.md +0 -20
  118. package/src/api/docs/FileApi.md +0 -274
  119. package/src/api/docs/ProcessStatus.md +0 -28
  120. package/src/api/docs/ProjectApi.md +0 -362
  121. package/src/api/docs/ProjectInfo.md +0 -24
  122. package/src/api/docs/ProjectStats.md +0 -28
  123. package/src/api/docs/RenameFileDto.md +0 -20
  124. package/src/api/docs/RenameProjectRequest.md +0 -20
  125. package/src/api/docs/RunRequest.md +0 -24
  126. package/src/api/docs/RunResult.md +0 -30
  127. package/src/api/docs/RunningProjectInfo.md +0 -26
  128. package/src/api/docs/UpdateFileDto.md +0 -20
  129. package/src/api/git_push.sh +0 -57
  130. package/src/api/index.ts +0 -18
  131. package/src/assets/Badge.svg +0 -17
  132. package/src/assets/closeIcon.svg +0 -20
  133. package/src/assets/documentIcon.svg +0 -11
  134. package/src/assets/history.svg +0 -11
  135. package/src/assets/output.svg +0 -12
  136. package/src/assets/plus.svg +0 -20
  137. package/src/assets/react.svg +0 -1
  138. package/src/assets/save-icon.svg +0 -11
  139. package/src/assets/shield.svg +0 -10
  140. package/src/assets/start.svg +0 -11
  141. package/src/assets/stop.svg +0 -11
  142. package/src/components/CompilerWidget.module.scss +0 -169
  143. package/src/components/CompilerWidget.tsx +0 -279
  144. package/src/components/FileExplorer.module.scss +0 -372
  145. package/src/components/FileExplorer.tsx +0 -285
  146. package/src/components/MonacoEditorWrapper.module.scss +0 -29
  147. package/src/components/MonacoEditorWrapper.tsx +0 -74
  148. package/src/components/OutputPanel.module.scss +0 -123
  149. package/src/components/OutputPanel.tsx +0 -53
  150. package/src/components/RunContainer.module.scss +0 -150
  151. package/src/components/RunContainer.tsx +0 -34
  152. package/src/hooks/useCompiler.ts +0 -228
  153. package/src/hooks/useInitialNodes.ts +0 -0
  154. package/src/index.css +0 -78
  155. package/src/main.tsx +0 -8
  156. package/src/types/EditorDocument.ts +0 -8
  157. package/swagger.json +0 -1020
  158. package/tsconfig.app.json +0 -29
  159. package/tsconfig.json +0 -7
  160. package/tsconfig.node.json +0 -26
  161. package/vite.config.ts +0 -8
@@ -0,0 +1,569 @@
1
+ const e = {
2
+ comments: {
3
+ lineComment: "#"
4
+ },
5
+ brackets: [
6
+ ["{", "}"],
7
+ ["[", "]"],
8
+ ["(", ")"]
9
+ ],
10
+ surroundingPairs: [
11
+ { open: "{", close: "}" },
12
+ { open: "[", close: "]" },
13
+ { open: "(", close: ")" },
14
+ { open: "'", close: "'" },
15
+ { open: '"', close: '"' }
16
+ ],
17
+ autoClosingPairs: [
18
+ { open: "'", close: "'", notIn: ["string", "comment"] },
19
+ { open: '"', close: '"', notIn: ["comment"] },
20
+ { open: '"""', close: '"""' },
21
+ { open: "`", close: "`", notIn: ["string", "comment"] },
22
+ { open: "(", close: ")" },
23
+ { open: "{", close: "}" },
24
+ { open: "[", close: "]" },
25
+ { open: "<<", close: ">>" }
26
+ ],
27
+ indentationRules: {
28
+ increaseIndentPattern: /^\s*(after|else|catch|rescue|fn|[^#]*(do|<\-|\->|\{|\[|\=))\s*$/,
29
+ decreaseIndentPattern: /^\s*((\}|\])\s*$|(after|else|catch|rescue|end)\b)/
30
+ }
31
+ }, t = {
32
+ defaultToken: "source",
33
+ tokenPostfix: ".elixir",
34
+ brackets: [
35
+ { open: "[", close: "]", token: "delimiter.square" },
36
+ { open: "(", close: ")", token: "delimiter.parenthesis" },
37
+ { open: "{", close: "}", token: "delimiter.curly" },
38
+ { open: "<<", close: ">>", token: "delimiter.angle.special" }
39
+ ],
40
+ // Below are lists/regexps to which we reference later.
41
+ declarationKeywords: [
42
+ "def",
43
+ "defp",
44
+ "defn",
45
+ "defnp",
46
+ "defguard",
47
+ "defguardp",
48
+ "defmacro",
49
+ "defmacrop",
50
+ "defdelegate",
51
+ "defcallback",
52
+ "defmacrocallback",
53
+ "defmodule",
54
+ "defprotocol",
55
+ "defexception",
56
+ "defimpl",
57
+ "defstruct"
58
+ ],
59
+ operatorKeywords: ["and", "in", "not", "or", "when"],
60
+ namespaceKeywords: ["alias", "import", "require", "use"],
61
+ otherKeywords: [
62
+ "after",
63
+ "case",
64
+ "catch",
65
+ "cond",
66
+ "do",
67
+ "else",
68
+ "end",
69
+ "fn",
70
+ "for",
71
+ "if",
72
+ "quote",
73
+ "raise",
74
+ "receive",
75
+ "rescue",
76
+ "super",
77
+ "throw",
78
+ "try",
79
+ "unless",
80
+ "unquote_splicing",
81
+ "unquote",
82
+ "with"
83
+ ],
84
+ constants: ["true", "false", "nil"],
85
+ nameBuiltin: ["__MODULE__", "__DIR__", "__ENV__", "__CALLER__", "__STACKTRACE__"],
86
+ // Matches any of the operator names:
87
+ // <<< >>> ||| &&& ^^^ ~~~ === !== ~>> <~> |~> <|> == != <= >= && || \\ <> ++ -- |> =~ -> <- ~> <~ :: .. = < > + - * / | . ^ & !
88
+ operator: /-[->]?|!={0,2}|\*{1,2}|\/|\\\\|&{1,3}|\.\.?|\^(?:\^\^)?|\+\+?|<(?:-|<<|=|>|\|>|~>?)?|=~|={1,3}|>(?:=|>>)?|\|~>|\|>|\|{1,3}|~>>?|~~~|::/,
89
+ // See https://hexdocs.pm/elixir/syntax-reference.html#variables
90
+ variableName: /[a-z_][a-zA-Z0-9_]*[?!]?/,
91
+ // See https://hexdocs.pm/elixir/syntax-reference.html#atoms
92
+ atomName: /[a-zA-Z_][a-zA-Z0-9_@]*[?!]?|@specialAtomName|@operator/,
93
+ specialAtomName: /\.\.\.|<<>>|%\{\}|%|\{\}/,
94
+ aliasPart: /[A-Z][a-zA-Z0-9_]*/,
95
+ moduleName: /@aliasPart(?:\.@aliasPart)*/,
96
+ // Sigil pairs are: """ """, ''' ''', " ", ' ', / /, | |, < >, { }, [ ], ( )
97
+ sigilSymmetricDelimiter: /"""|'''|"|'|\/|\|/,
98
+ sigilStartDelimiter: /@sigilSymmetricDelimiter|<|\{|\[|\(/,
99
+ sigilEndDelimiter: /@sigilSymmetricDelimiter|>|\}|\]|\)/,
100
+ sigilModifiers: /[a-zA-Z0-9]*/,
101
+ decimal: /\d(?:_?\d)*/,
102
+ hex: /[0-9a-fA-F](_?[0-9a-fA-F])*/,
103
+ octal: /[0-7](_?[0-7])*/,
104
+ binary: /[01](_?[01])*/,
105
+ // See https://hexdocs.pm/elixir/master/String.html#module-escape-characters
106
+ escape: /\\u[0-9a-fA-F]{4}|\\x[0-9a-fA-F]{2}|\\./,
107
+ // The keys below correspond to tokenizer states.
108
+ // We start from the root state and match against its rules
109
+ // until we explicitly transition into another state.
110
+ // The `include` simply brings in all operations from the given state
111
+ // and is useful for improving readability.
112
+ tokenizer: {
113
+ root: [
114
+ { include: "@whitespace" },
115
+ { include: "@comments" },
116
+ // Keywords start as either an identifier or a string,
117
+ // but end with a : so it's important to match this first.
118
+ { include: "@keywordsShorthand" },
119
+ { include: "@numbers" },
120
+ { include: "@identifiers" },
121
+ { include: "@strings" },
122
+ { include: "@atoms" },
123
+ { include: "@sigils" },
124
+ { include: "@attributes" },
125
+ { include: "@symbols" }
126
+ ],
127
+ // Whitespace
128
+ whitespace: [[/\s+/, "white"]],
129
+ // Comments
130
+ comments: [[/(#)(.*)/, ["comment.punctuation", "comment"]]],
131
+ // Keyword list shorthand
132
+ keywordsShorthand: [
133
+ [/(@atomName)(:)(\s+)/, ["constant", "constant.punctuation", "white"]],
134
+ // Use positive look-ahead to ensure the string is followed by :
135
+ // and should be considered a keyword.
136
+ [
137
+ /"(?=([^"]|#\{.*?\}|\\")*":)/,
138
+ { token: "constant.delimiter", next: "@doubleQuotedStringKeyword" }
139
+ ],
140
+ [
141
+ /'(?=([^']|#\{.*?\}|\\')*':)/,
142
+ { token: "constant.delimiter", next: "@singleQuotedStringKeyword" }
143
+ ]
144
+ ],
145
+ doubleQuotedStringKeyword: [
146
+ [/":/, { token: "constant.delimiter", next: "@pop" }],
147
+ { include: "@stringConstantContentInterpol" }
148
+ ],
149
+ singleQuotedStringKeyword: [
150
+ [/':/, { token: "constant.delimiter", next: "@pop" }],
151
+ { include: "@stringConstantContentInterpol" }
152
+ ],
153
+ // Numbers
154
+ numbers: [
155
+ [/0b@binary/, "number.binary"],
156
+ [/0o@octal/, "number.octal"],
157
+ [/0x@hex/, "number.hex"],
158
+ [/@decimal\.@decimal([eE]-?@decimal)?/, "number.float"],
159
+ [/@decimal/, "number"]
160
+ ],
161
+ // Identifiers
162
+ identifiers: [
163
+ // Tokenize identifier name in function-like definitions.
164
+ // Note: given `def a + b, do: nil`, `a` is not a function name,
165
+ // so we use negative look-ahead to ensure there's no operator.
166
+ [
167
+ /\b(defp?|defnp?|defmacrop?|defguardp?|defdelegate)(\s+)(@variableName)(?!\s+@operator)/,
168
+ [
169
+ "keyword.declaration",
170
+ "white",
171
+ {
172
+ cases: {
173
+ unquote: "keyword",
174
+ "@default": "function"
175
+ }
176
+ }
177
+ ]
178
+ ],
179
+ // Tokenize function calls
180
+ [
181
+ // In-scope call - an identifier followed by ( or .(
182
+ /(@variableName)(?=\s*\.?\s*\()/,
183
+ {
184
+ cases: {
185
+ // Tokenize as keyword in cases like `if(..., do: ..., else: ...)`
186
+ "@declarationKeywords": "keyword.declaration",
187
+ "@namespaceKeywords": "keyword",
188
+ "@otherKeywords": "keyword",
189
+ "@default": "function.call"
190
+ }
191
+ }
192
+ ],
193
+ [
194
+ // Referencing function in a module
195
+ /(@moduleName)(\s*)(\.)(\s*)(@variableName)/,
196
+ ["type.identifier", "white", "operator", "white", "function.call"]
197
+ ],
198
+ [
199
+ // Referencing function in an Erlang module
200
+ /(:)(@atomName)(\s*)(\.)(\s*)(@variableName)/,
201
+ ["constant.punctuation", "constant", "white", "operator", "white", "function.call"]
202
+ ],
203
+ [
204
+ // Piping into a function (tokenized separately as it may not have parentheses)
205
+ /(\|>)(\s*)(@variableName)/,
206
+ [
207
+ "operator",
208
+ "white",
209
+ {
210
+ cases: {
211
+ "@otherKeywords": "keyword",
212
+ "@default": "function.call"
213
+ }
214
+ }
215
+ ]
216
+ ],
217
+ [
218
+ // Function reference passed to another function
219
+ /(&)(\s*)(@variableName)/,
220
+ ["operator", "white", "function.call"]
221
+ ],
222
+ // Language keywords, builtins, constants and variables
223
+ [
224
+ /@variableName/,
225
+ {
226
+ cases: {
227
+ "@declarationKeywords": "keyword.declaration",
228
+ "@operatorKeywords": "keyword.operator",
229
+ "@namespaceKeywords": "keyword",
230
+ "@otherKeywords": "keyword",
231
+ "@constants": "constant.language",
232
+ "@nameBuiltin": "variable.language",
233
+ "_.*": "comment.unused",
234
+ "@default": "identifier"
235
+ }
236
+ }
237
+ ],
238
+ // Module names
239
+ [/@moduleName/, "type.identifier"]
240
+ ],
241
+ // Strings
242
+ strings: [
243
+ [/"""/, { token: "string.delimiter", next: "@doubleQuotedHeredoc" }],
244
+ [/'''/, { token: "string.delimiter", next: "@singleQuotedHeredoc" }],
245
+ [/"/, { token: "string.delimiter", next: "@doubleQuotedString" }],
246
+ [/'/, { token: "string.delimiter", next: "@singleQuotedString" }]
247
+ ],
248
+ doubleQuotedHeredoc: [
249
+ [/"""/, { token: "string.delimiter", next: "@pop" }],
250
+ { include: "@stringContentInterpol" }
251
+ ],
252
+ singleQuotedHeredoc: [
253
+ [/'''/, { token: "string.delimiter", next: "@pop" }],
254
+ { include: "@stringContentInterpol" }
255
+ ],
256
+ doubleQuotedString: [
257
+ [/"/, { token: "string.delimiter", next: "@pop" }],
258
+ { include: "@stringContentInterpol" }
259
+ ],
260
+ singleQuotedString: [
261
+ [/'/, { token: "string.delimiter", next: "@pop" }],
262
+ { include: "@stringContentInterpol" }
263
+ ],
264
+ // Atoms
265
+ atoms: [
266
+ [/(:)(@atomName)/, ["constant.punctuation", "constant"]],
267
+ [/:"/, { token: "constant.delimiter", next: "@doubleQuotedStringAtom" }],
268
+ [/:'/, { token: "constant.delimiter", next: "@singleQuotedStringAtom" }]
269
+ ],
270
+ doubleQuotedStringAtom: [
271
+ [/"/, { token: "constant.delimiter", next: "@pop" }],
272
+ { include: "@stringConstantContentInterpol" }
273
+ ],
274
+ singleQuotedStringAtom: [
275
+ [/'/, { token: "constant.delimiter", next: "@pop" }],
276
+ { include: "@stringConstantContentInterpol" }
277
+ ],
278
+ // Sigils
279
+ // See https://elixir-lang.org/getting-started/sigils.html
280
+ // Sigils allow for typing values using their textual representation.
281
+ // All sigils start with ~ followed by a letter or
282
+ // multi-letter uppercase starting at Elixir v1.15.0, indicating sigil type
283
+ // and then a delimiter pair enclosing the textual representation.
284
+ // Optional modifiers are allowed after the closing delimiter.
285
+ // For instance a regular expressions can be written as:
286
+ // ~r/foo|bar/ ~r{foo|bar} ~r/foo|bar/g
287
+ //
288
+ // In general lowercase sigils allow for interpolation
289
+ // and escaped characters, whereas uppercase sigils don't
290
+ //
291
+ // During tokenization we want to distinguish some
292
+ // specific sigil types, namely string and regexp,
293
+ // so that they cen be themed separately.
294
+ //
295
+ // To reasonably handle all those combinations we leverage
296
+ // dot-separated states, so if we transition to @sigilStart.interpol.s.{.}
297
+ // then "sigilStart.interpol.s" state will match and also all
298
+ // the individual dot-separated parameters can be accessed.
299
+ sigils: [
300
+ [/~[a-z]@sigilStartDelimiter/, { token: "@rematch", next: "@sigil.interpol" }],
301
+ [/~([A-Z]+)@sigilStartDelimiter/, { token: "@rematch", next: "@sigil.noInterpol" }]
302
+ ],
303
+ sigil: [
304
+ [/~([a-z]|[A-Z]+)\{/, { token: "@rematch", switchTo: "@sigilStart.$S2.$1.{.}" }],
305
+ [/~([a-z]|[A-Z]+)\[/, { token: "@rematch", switchTo: "@sigilStart.$S2.$1.[.]" }],
306
+ [/~([a-z]|[A-Z]+)\(/, { token: "@rematch", switchTo: "@sigilStart.$S2.$1.(.)" }],
307
+ [/~([a-z]|[A-Z]+)\</, { token: "@rematch", switchTo: "@sigilStart.$S2.$1.<.>" }],
308
+ [
309
+ /~([a-z]|[A-Z]+)(@sigilSymmetricDelimiter)/,
310
+ { token: "@rematch", switchTo: "@sigilStart.$S2.$1.$2.$2" }
311
+ ]
312
+ ],
313
+ // The definitions below expect states to be of the form:
314
+ //
315
+ // sigilStart.<interpol-or-noInterpol>.<sigil-letter>.<start-delimiter>.<end-delimiter>
316
+ // sigilContinue.<interpol-or-noInterpol>.<sigil-letter>.<start-delimiter>.<end-delimiter>
317
+ //
318
+ // The sigilStart state is used only to properly classify the token (as string/regex/sigil)
319
+ // and immediately switches to the sigilContinue sate, which handles the actual content
320
+ // and waits for the corresponding end delimiter.
321
+ "sigilStart.interpol.s": [
322
+ [
323
+ /~s@sigilStartDelimiter/,
324
+ {
325
+ token: "string.delimiter",
326
+ switchTo: "@sigilContinue.$S2.$S3.$S4.$S5"
327
+ }
328
+ ]
329
+ ],
330
+ "sigilContinue.interpol.s": [
331
+ [
332
+ /(@sigilEndDelimiter)@sigilModifiers/,
333
+ {
334
+ cases: {
335
+ "$1==$S5": { token: "string.delimiter", next: "@pop" },
336
+ "@default": "string"
337
+ }
338
+ }
339
+ ],
340
+ { include: "@stringContentInterpol" }
341
+ ],
342
+ "sigilStart.noInterpol.S": [
343
+ [
344
+ /~S@sigilStartDelimiter/,
345
+ {
346
+ token: "string.delimiter",
347
+ switchTo: "@sigilContinue.$S2.$S3.$S4.$S5"
348
+ }
349
+ ]
350
+ ],
351
+ "sigilContinue.noInterpol.S": [
352
+ // Ignore escaped sigil end
353
+ [/(^|[^\\])\\@sigilEndDelimiter/, "string"],
354
+ [
355
+ /(@sigilEndDelimiter)@sigilModifiers/,
356
+ {
357
+ cases: {
358
+ "$1==$S5": { token: "string.delimiter", next: "@pop" },
359
+ "@default": "string"
360
+ }
361
+ }
362
+ ],
363
+ { include: "@stringContent" }
364
+ ],
365
+ "sigilStart.interpol.r": [
366
+ [
367
+ /~r@sigilStartDelimiter/,
368
+ {
369
+ token: "regexp.delimiter",
370
+ switchTo: "@sigilContinue.$S2.$S3.$S4.$S5"
371
+ }
372
+ ]
373
+ ],
374
+ "sigilContinue.interpol.r": [
375
+ [
376
+ /(@sigilEndDelimiter)@sigilModifiers/,
377
+ {
378
+ cases: {
379
+ "$1==$S5": { token: "regexp.delimiter", next: "@pop" },
380
+ "@default": "regexp"
381
+ }
382
+ }
383
+ ],
384
+ { include: "@regexpContentInterpol" }
385
+ ],
386
+ "sigilStart.noInterpol.R": [
387
+ [
388
+ /~R@sigilStartDelimiter/,
389
+ {
390
+ token: "regexp.delimiter",
391
+ switchTo: "@sigilContinue.$S2.$S3.$S4.$S5"
392
+ }
393
+ ]
394
+ ],
395
+ "sigilContinue.noInterpol.R": [
396
+ // Ignore escaped sigil end
397
+ [/(^|[^\\])\\@sigilEndDelimiter/, "regexp"],
398
+ [
399
+ /(@sigilEndDelimiter)@sigilModifiers/,
400
+ {
401
+ cases: {
402
+ "$1==$S5": { token: "regexp.delimiter", next: "@pop" },
403
+ "@default": "regexp"
404
+ }
405
+ }
406
+ ],
407
+ { include: "@regexpContent" }
408
+ ],
409
+ // Fallback to the generic sigil by default
410
+ "sigilStart.interpol": [
411
+ [
412
+ /~([a-z]|[A-Z]+)@sigilStartDelimiter/,
413
+ {
414
+ token: "sigil.delimiter",
415
+ switchTo: "@sigilContinue.$S2.$S3.$S4.$S5"
416
+ }
417
+ ]
418
+ ],
419
+ "sigilContinue.interpol": [
420
+ [
421
+ /(@sigilEndDelimiter)@sigilModifiers/,
422
+ {
423
+ cases: {
424
+ "$1==$S5": { token: "sigil.delimiter", next: "@pop" },
425
+ "@default": "sigil"
426
+ }
427
+ }
428
+ ],
429
+ { include: "@sigilContentInterpol" }
430
+ ],
431
+ "sigilStart.noInterpol": [
432
+ [
433
+ /~([a-z]|[A-Z]+)@sigilStartDelimiter/,
434
+ {
435
+ token: "sigil.delimiter",
436
+ switchTo: "@sigilContinue.$S2.$S3.$S4.$S5"
437
+ }
438
+ ]
439
+ ],
440
+ "sigilContinue.noInterpol": [
441
+ // Ignore escaped sigil end
442
+ [/(^|[^\\])\\@sigilEndDelimiter/, "sigil"],
443
+ [
444
+ /(@sigilEndDelimiter)@sigilModifiers/,
445
+ {
446
+ cases: {
447
+ "$1==$S5": { token: "sigil.delimiter", next: "@pop" },
448
+ "@default": "sigil"
449
+ }
450
+ }
451
+ ],
452
+ { include: "@sigilContent" }
453
+ ],
454
+ // Attributes
455
+ attributes: [
456
+ // Module @doc* attributes - tokenized as comments
457
+ [
458
+ /\@(module|type)?doc (~[sS])?"""/,
459
+ {
460
+ token: "comment.block.documentation",
461
+ next: "@doubleQuotedHeredocDocstring"
462
+ }
463
+ ],
464
+ [
465
+ /\@(module|type)?doc (~[sS])?'''/,
466
+ {
467
+ token: "comment.block.documentation",
468
+ next: "@singleQuotedHeredocDocstring"
469
+ }
470
+ ],
471
+ [
472
+ /\@(module|type)?doc (~[sS])?"/,
473
+ {
474
+ token: "comment.block.documentation",
475
+ next: "@doubleQuotedStringDocstring"
476
+ }
477
+ ],
478
+ [
479
+ /\@(module|type)?doc (~[sS])?'/,
480
+ {
481
+ token: "comment.block.documentation",
482
+ next: "@singleQuotedStringDocstring"
483
+ }
484
+ ],
485
+ [/\@(module|type)?doc false/, "comment.block.documentation"],
486
+ // Module attributes
487
+ [/\@(@variableName)/, "variable"]
488
+ ],
489
+ doubleQuotedHeredocDocstring: [
490
+ [/"""/, { token: "comment.block.documentation", next: "@pop" }],
491
+ { include: "@docstringContent" }
492
+ ],
493
+ singleQuotedHeredocDocstring: [
494
+ [/'''/, { token: "comment.block.documentation", next: "@pop" }],
495
+ { include: "@docstringContent" }
496
+ ],
497
+ doubleQuotedStringDocstring: [
498
+ [/"/, { token: "comment.block.documentation", next: "@pop" }],
499
+ { include: "@docstringContent" }
500
+ ],
501
+ singleQuotedStringDocstring: [
502
+ [/'/, { token: "comment.block.documentation", next: "@pop" }],
503
+ { include: "@docstringContent" }
504
+ ],
505
+ // Operators, punctuation, brackets
506
+ symbols: [
507
+ // Code point operator (either with regular character ?a or an escaped one ?\n)
508
+ [/\?(\\.|[^\\\s])/, "number.constant"],
509
+ // Anonymous function arguments
510
+ [/&\d+/, "operator"],
511
+ // Bitshift operators (must go before delimiters, so that << >> don't match first)
512
+ [/<<<|>>>/, "operator"],
513
+ // Delimiter pairs
514
+ [/[()\[\]\{\}]|<<|>>/, "@brackets"],
515
+ // Triple dot is a valid name (must go before operators, so that .. doesn't match instead)
516
+ [/\.\.\./, "identifier"],
517
+ // Punctuation => (must go before operators, so it's not tokenized as = then >)
518
+ [/=>/, "punctuation"],
519
+ // Operators
520
+ [/@operator/, "operator"],
521
+ // Punctuation
522
+ [/[:;,.%]/, "punctuation"]
523
+ ],
524
+ // Generic helpers
525
+ stringContentInterpol: [
526
+ { include: "@interpolation" },
527
+ { include: "@escapeChar" },
528
+ { include: "@stringContent" }
529
+ ],
530
+ stringContent: [[/./, "string"]],
531
+ stringConstantContentInterpol: [
532
+ { include: "@interpolation" },
533
+ { include: "@escapeChar" },
534
+ { include: "@stringConstantContent" }
535
+ ],
536
+ stringConstantContent: [[/./, "constant"]],
537
+ regexpContentInterpol: [
538
+ { include: "@interpolation" },
539
+ { include: "@escapeChar" },
540
+ { include: "@regexpContent" }
541
+ ],
542
+ regexpContent: [
543
+ // # may be a regular regexp char, so we use a heuristic
544
+ // assuming a # surrounded by whitespace is actually a comment.
545
+ [/(\s)(#)(\s.*)$/, ["white", "comment.punctuation", "comment"]],
546
+ [/./, "regexp"]
547
+ ],
548
+ sigilContentInterpol: [
549
+ { include: "@interpolation" },
550
+ { include: "@escapeChar" },
551
+ { include: "@sigilContent" }
552
+ ],
553
+ sigilContent: [[/./, "sigil"]],
554
+ docstringContent: [[/./, "comment.block.documentation"]],
555
+ escapeChar: [[/@escape/, "constant.character.escape"]],
556
+ interpolation: [[/#{/, { token: "delimiter.bracket.embed", next: "@interpolationContinue" }]],
557
+ interpolationContinue: [
558
+ [/}/, { token: "delimiter.bracket.embed", next: "@pop" }],
559
+ // Interpolation brackets may contain arbitrary code,
560
+ // so we simply match against all the root rules,
561
+ // until we reach interpolation end (the above matches).
562
+ { include: "@root" }
563
+ ]
564
+ }
565
+ };
566
+ export {
567
+ e as conf,
568
+ t as language
569
+ };