357 lines
10 KiB
JavaScript
357 lines
10 KiB
JavaScript
/*!-----------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Version: 0.43.0(94c055bcbdd49f04a0fa15515e848542a79fb948)
|
|
* Released under the MIT license
|
|
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
|
|
*-----------------------------------------------------------------------------*/
|
|
|
|
// src/basic-languages/scala/scala.ts
|
|
var conf = {
|
|
wordPattern: /(unary_[@~!#%^&*()\-=+\\|:<>\/?]+)|([a-zA-Z_$][\w$]*?_=)|(`[^`]+`)|([a-zA-Z_$][\w$]*)/g,
|
|
comments: {
|
|
lineComment: "//",
|
|
blockComment: ["/*", "*/"]
|
|
},
|
|
brackets: [
|
|
["{", "}"],
|
|
["[", "]"],
|
|
["(", ")"]
|
|
],
|
|
autoClosingPairs: [
|
|
{ open: "{", close: "}" },
|
|
{ open: "[", close: "]" },
|
|
{ open: "(", close: ")" },
|
|
{ open: '"', close: '"' },
|
|
{ open: "'", close: "'" }
|
|
],
|
|
surroundingPairs: [
|
|
{ open: "{", close: "}" },
|
|
{ open: "[", close: "]" },
|
|
{ open: "(", close: ")" },
|
|
{ open: '"', close: '"' },
|
|
{ open: "'", close: "'" }
|
|
],
|
|
folding: {
|
|
markers: {
|
|
start: new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:<editor-fold\\b))"),
|
|
end: new RegExp("^\\s*//\\s*(?:(?:#?endregion\\b)|(?:</editor-fold>))")
|
|
}
|
|
}
|
|
};
|
|
var language = {
|
|
tokenPostfix: ".scala",
|
|
keywords: [
|
|
"asInstanceOf",
|
|
"catch",
|
|
"class",
|
|
"classOf",
|
|
"def",
|
|
"do",
|
|
"else",
|
|
"extends",
|
|
"finally",
|
|
"for",
|
|
"foreach",
|
|
"forSome",
|
|
"if",
|
|
"import",
|
|
"isInstanceOf",
|
|
"macro",
|
|
"match",
|
|
"new",
|
|
"object",
|
|
"package",
|
|
"return",
|
|
"throw",
|
|
"trait",
|
|
"try",
|
|
"type",
|
|
"until",
|
|
"val",
|
|
"var",
|
|
"while",
|
|
"with",
|
|
"yield",
|
|
"given",
|
|
"enum",
|
|
"then"
|
|
],
|
|
softKeywords: ["as", "export", "extension", "end", "derives", "on"],
|
|
constants: ["true", "false", "null", "this", "super"],
|
|
modifiers: [
|
|
"abstract",
|
|
"final",
|
|
"implicit",
|
|
"lazy",
|
|
"override",
|
|
"private",
|
|
"protected",
|
|
"sealed"
|
|
],
|
|
softModifiers: ["inline", "opaque", "open", "transparent", "using"],
|
|
name: /(?:[a-z_$][\w$]*|`[^`]+`)/,
|
|
type: /(?:[A-Z][\w$]*)/,
|
|
symbols: /[=><!~?:&|+\-*\/^\\%@#]+/,
|
|
digits: /\d+(_+\d+)*/,
|
|
hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,
|
|
escapes: /\\(?:[btnfr\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
|
|
fstring_conv: /[bBhHsScCdoxXeEfgGaAt]|[Tn](?:[HIklMSLNpzZsQ]|[BbhAaCYyjmde]|[RTrDFC])/,
|
|
tokenizer: {
|
|
root: [
|
|
[/\braw"""/, { token: "string.quote", bracket: "@open", next: "@rawstringt" }],
|
|
[/\braw"/, { token: "string.quote", bracket: "@open", next: "@rawstring" }],
|
|
[/\bs"""/, { token: "string.quote", bracket: "@open", next: "@sstringt" }],
|
|
[/\bs"/, { token: "string.quote", bracket: "@open", next: "@sstring" }],
|
|
[/\bf""""/, { token: "string.quote", bracket: "@open", next: "@fstringt" }],
|
|
[/\bf"/, { token: "string.quote", bracket: "@open", next: "@fstring" }],
|
|
[/"""/, { token: "string.quote", bracket: "@open", next: "@stringt" }],
|
|
[/"/, { token: "string.quote", bracket: "@open", next: "@string" }],
|
|
[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/, "number.float", "@allowMethod"],
|
|
[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/, "number.float", "@allowMethod"],
|
|
[/0[xX](@hexdigits)[Ll]?/, "number.hex", "@allowMethod"],
|
|
[/(@digits)[fFdD]/, "number.float", "@allowMethod"],
|
|
[/(@digits)[lL]?/, "number", "@allowMethod"],
|
|
[/\b_\*/, "key"],
|
|
[/\b(_)\b/, "keyword", "@allowMethod"],
|
|
[/\bimport\b/, "keyword", "@import"],
|
|
[/\b(case)([ \t]+)(class)\b/, ["keyword.modifier", "white", "keyword"]],
|
|
[/\bcase\b/, "keyword", "@case"],
|
|
[/\bva[lr]\b/, "keyword", "@vardef"],
|
|
[
|
|
/\b(def)([ \t]+)((?:unary_)?@symbols|@name(?:_=)|@name)/,
|
|
["keyword", "white", "identifier"]
|
|
],
|
|
[/@name(?=[ \t]*:(?!:))/, "variable"],
|
|
[/(\.)(@name|@symbols)/, ["operator", { token: "@rematch", next: "@allowMethod" }]],
|
|
[/([{(])(\s*)(@name(?=\s*=>))/, ["@brackets", "white", "variable"]],
|
|
[
|
|
/@name/,
|
|
{
|
|
cases: {
|
|
"@keywords": "keyword",
|
|
"@softKeywords": "keyword",
|
|
"@modifiers": "keyword.modifier",
|
|
"@softModifiers": "keyword.modifier",
|
|
"@constants": {
|
|
token: "constant",
|
|
next: "@allowMethod"
|
|
},
|
|
"@default": {
|
|
token: "identifier",
|
|
next: "@allowMethod"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
[/@type/, "type", "@allowMethod"],
|
|
{ include: "@whitespace" },
|
|
[/@[a-zA-Z_$][\w$]*(?:\.[a-zA-Z_$][\w$]*)*/, "annotation"],
|
|
[/[{(]/, "@brackets"],
|
|
[/[})]/, "@brackets", "@allowMethod"],
|
|
[/\[/, "operator.square"],
|
|
[/](?!\s*(?:va[rl]|def|type)\b)/, "operator.square", "@allowMethod"],
|
|
[/]/, "operator.square"],
|
|
[/([=-]>|<-|>:|<:|:>|<%)(?=[\s\w()[\]{},\."'`])/, "keyword"],
|
|
[/@symbols/, "operator"],
|
|
[/[;,\.]/, "delimiter"],
|
|
[/'[a-zA-Z$][\w$]*(?!')/, "attribute.name"],
|
|
[/'[^\\']'/, "string", "@allowMethod"],
|
|
[/(')(@escapes)(')/, ["string", "string.escape", { token: "string", next: "@allowMethod" }]],
|
|
[/'/, "string.invalid"]
|
|
],
|
|
import: [
|
|
[/;/, "delimiter", "@pop"],
|
|
[/^|$/, "", "@pop"],
|
|
[/[ \t]+/, "white"],
|
|
[/[\n\r]+/, "white", "@pop"],
|
|
[/\/\*/, "comment", "@comment"],
|
|
[/@name|@type/, "type"],
|
|
[/[(){}]/, "@brackets"],
|
|
[/[[\]]/, "operator.square"],
|
|
[/[\.,]/, "delimiter"]
|
|
],
|
|
allowMethod: [
|
|
[/^|$/, "", "@pop"],
|
|
[/[ \t]+/, "white"],
|
|
[/[\n\r]+/, "white", "@pop"],
|
|
[/\/\*/, "comment", "@comment"],
|
|
[/(?==>[\s\w([{])/, "keyword", "@pop"],
|
|
[
|
|
/(@name|@symbols)(?=[ \t]*[[({"'`]|[ \t]+(?:[+-]?\.?\d|\w))/,
|
|
{
|
|
cases: {
|
|
"@keywords": { token: "keyword", next: "@pop" },
|
|
"->|<-|>:|<:|<%": { token: "keyword", next: "@pop" },
|
|
"@default": { token: "@rematch", next: "@pop" }
|
|
}
|
|
}
|
|
],
|
|
["", "", "@pop"]
|
|
],
|
|
comment: [
|
|
[/[^\/*]+/, "comment"],
|
|
[/\/\*/, "comment", "@push"],
|
|
[/\*\//, "comment", "@pop"],
|
|
[/[\/*]/, "comment"]
|
|
],
|
|
case: [
|
|
[/\b_\*/, "key"],
|
|
[/\b(_|true|false|null|this|super)\b/, "keyword", "@allowMethod"],
|
|
[/\bif\b|=>/, "keyword", "@pop"],
|
|
[/`[^`]+`/, "identifier", "@allowMethod"],
|
|
[/@name/, "variable", "@allowMethod"],
|
|
[/:::?|\||@(?![a-z_$])/, "keyword"],
|
|
{ include: "@root" }
|
|
],
|
|
vardef: [
|
|
[/\b_\*/, "key"],
|
|
[/\b(_|true|false|null|this|super)\b/, "keyword"],
|
|
[/@name/, "variable"],
|
|
[/:::?|\||@(?![a-z_$])/, "keyword"],
|
|
[/=|:(?!:)/, "operator", "@pop"],
|
|
[/$/, "white", "@pop"],
|
|
{ include: "@root" }
|
|
],
|
|
string: [
|
|
[/[^\\"\n\r]+/, "string"],
|
|
[/@escapes/, "string.escape"],
|
|
[/\\./, "string.escape.invalid"],
|
|
[
|
|
/"/,
|
|
{
|
|
token: "string.quote",
|
|
bracket: "@close",
|
|
switchTo: "@allowMethod"
|
|
}
|
|
]
|
|
],
|
|
stringt: [
|
|
[/[^\\"\n\r]+/, "string"],
|
|
[/@escapes/, "string.escape"],
|
|
[/\\./, "string.escape.invalid"],
|
|
[/"(?=""")/, "string"],
|
|
[
|
|
/"""/,
|
|
{
|
|
token: "string.quote",
|
|
bracket: "@close",
|
|
switchTo: "@allowMethod"
|
|
}
|
|
],
|
|
[/"/, "string"]
|
|
],
|
|
fstring: [
|
|
[/@escapes/, "string.escape"],
|
|
[
|
|
/"/,
|
|
{
|
|
token: "string.quote",
|
|
bracket: "@close",
|
|
switchTo: "@allowMethod"
|
|
}
|
|
],
|
|
[/\$\$/, "string"],
|
|
[/(\$)([a-z_]\w*)/, ["operator", "identifier"]],
|
|
[/\$\{/, "operator", "@interp"],
|
|
[/%%/, "string"],
|
|
[
|
|
/(%)([\-#+ 0,(])(\d+|\.\d+|\d+\.\d+)(@fstring_conv)/,
|
|
["metatag", "keyword.modifier", "number", "metatag"]
|
|
],
|
|
[/(%)(\d+|\.\d+|\d+\.\d+)(@fstring_conv)/, ["metatag", "number", "metatag"]],
|
|
[/(%)([\-#+ 0,(])(@fstring_conv)/, ["metatag", "keyword.modifier", "metatag"]],
|
|
[/(%)(@fstring_conv)/, ["metatag", "metatag"]],
|
|
[/./, "string"]
|
|
],
|
|
fstringt: [
|
|
[/@escapes/, "string.escape"],
|
|
[/"(?=""")/, "string"],
|
|
[
|
|
/"""/,
|
|
{
|
|
token: "string.quote",
|
|
bracket: "@close",
|
|
switchTo: "@allowMethod"
|
|
}
|
|
],
|
|
[/\$\$/, "string"],
|
|
[/(\$)([a-z_]\w*)/, ["operator", "identifier"]],
|
|
[/\$\{/, "operator", "@interp"],
|
|
[/%%/, "string"],
|
|
[
|
|
/(%)([\-#+ 0,(])(\d+|\.\d+|\d+\.\d+)(@fstring_conv)/,
|
|
["metatag", "keyword.modifier", "number", "metatag"]
|
|
],
|
|
[/(%)(\d+|\.\d+|\d+\.\d+)(@fstring_conv)/, ["metatag", "number", "metatag"]],
|
|
[/(%)([\-#+ 0,(])(@fstring_conv)/, ["metatag", "keyword.modifier", "metatag"]],
|
|
[/(%)(@fstring_conv)/, ["metatag", "metatag"]],
|
|
[/./, "string"]
|
|
],
|
|
sstring: [
|
|
[/@escapes/, "string.escape"],
|
|
[
|
|
/"/,
|
|
{
|
|
token: "string.quote",
|
|
bracket: "@close",
|
|
switchTo: "@allowMethod"
|
|
}
|
|
],
|
|
[/\$\$/, "string"],
|
|
[/(\$)([a-z_]\w*)/, ["operator", "identifier"]],
|
|
[/\$\{/, "operator", "@interp"],
|
|
[/./, "string"]
|
|
],
|
|
sstringt: [
|
|
[/@escapes/, "string.escape"],
|
|
[/"(?=""")/, "string"],
|
|
[
|
|
/"""/,
|
|
{
|
|
token: "string.quote",
|
|
bracket: "@close",
|
|
switchTo: "@allowMethod"
|
|
}
|
|
],
|
|
[/\$\$/, "string"],
|
|
[/(\$)([a-z_]\w*)/, ["operator", "identifier"]],
|
|
[/\$\{/, "operator", "@interp"],
|
|
[/./, "string"]
|
|
],
|
|
interp: [[/{/, "operator", "@push"], [/}/, "operator", "@pop"], { include: "@root" }],
|
|
rawstring: [
|
|
[/[^"]/, "string"],
|
|
[
|
|
/"/,
|
|
{
|
|
token: "string.quote",
|
|
bracket: "@close",
|
|
switchTo: "@allowMethod"
|
|
}
|
|
]
|
|
],
|
|
rawstringt: [
|
|
[/[^"]/, "string"],
|
|
[/"(?=""")/, "string"],
|
|
[
|
|
/"""/,
|
|
{
|
|
token: "string.quote",
|
|
bracket: "@close",
|
|
switchTo: "@allowMethod"
|
|
}
|
|
],
|
|
[/"/, "string"]
|
|
],
|
|
whitespace: [
|
|
[/[ \t\r\n]+/, "white"],
|
|
[/\/\*/, "comment", "@comment"],
|
|
[/\/\/.*$/, "comment"]
|
|
]
|
|
}
|
|
};
|
|
export {
|
|
conf,
|
|
language
|
|
};
|