parent
32bec06501
commit
6d52c96b5d
@ -0,0 +1,211 @@ |
|||||||
|
/* eslint-disable */ |
||||||
|
export const circomLanguageConfig = (monaco) => ({ |
||||||
|
wordPattern: |
||||||
|
/(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g, |
||||||
|
|
||||||
|
comments: { |
||||||
|
lineComment: "//", |
||||||
|
blockComment: ["/*", "*/"], |
||||||
|
}, |
||||||
|
|
||||||
|
brackets: [ |
||||||
|
["{", "}"], |
||||||
|
["[", "]"], |
||||||
|
["(", ")"], |
||||||
|
], |
||||||
|
|
||||||
|
onEnterRules: [ |
||||||
|
{ |
||||||
|
// e.g. /** | */
|
||||||
|
beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/, |
||||||
|
afterText: /^\s*\*\/$/, |
||||||
|
action: { |
||||||
|
indentAction: monaco.languages.IndentAction.IndentOutdent, |
||||||
|
appendText: " * ", |
||||||
|
}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
// e.g. /** ...|
|
||||||
|
beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/, |
||||||
|
action: { |
||||||
|
indentAction: monaco.languages.IndentAction.None, |
||||||
|
appendText: " * ", |
||||||
|
}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
// e.g. * ...|
|
||||||
|
beforeText: /^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/, |
||||||
|
action: { |
||||||
|
indentAction: monaco.languages.IndentAction.None, |
||||||
|
appendText: "* ", |
||||||
|
}, |
||||||
|
}, |
||||||
|
{ |
||||||
|
// e.g. */|
|
||||||
|
beforeText: /^(\t|(\ \ ))*\ \*\/\s*$/, |
||||||
|
action: { |
||||||
|
indentAction: monaco.languages.IndentAction.None, |
||||||
|
removeText: 1, |
||||||
|
}, |
||||||
|
}, |
||||||
|
], |
||||||
|
|
||||||
|
autoClosingPairs: [ |
||||||
|
{ open: "{", close: "}" }, |
||||||
|
{ open: "[", close: "]" }, |
||||||
|
{ open: "(", close: ")" }, |
||||||
|
{ open: '"', close: '"', notIn: ["string"] }, |
||||||
|
{ open: "'", close: "'", notIn: ["string", "comment"] }, |
||||||
|
{ open: "`", close: "`", notIn: ["string", "comment"] }, |
||||||
|
{ open: "/**", close: " */", notIn: ["string"] }, |
||||||
|
], |
||||||
|
|
||||||
|
folding: { |
||||||
|
markers: { |
||||||
|
start: new RegExp("^\\s*//\\s*#?region\\b"), |
||||||
|
end: new RegExp("^\\s*//\\s*#?endregion\\b"), |
||||||
|
}, |
||||||
|
}, |
||||||
|
}) |
||||||
|
|
||||||
|
export const circomTokensProvider = { |
||||||
|
defaultToken: "", |
||||||
|
tokenPostfix: ".circom", |
||||||
|
|
||||||
|
keywords: [ |
||||||
|
"signal", |
||||||
|
"input", |
||||||
|
"output", |
||||||
|
"public", |
||||||
|
"template", |
||||||
|
"component", |
||||||
|
"parallel", |
||||||
|
"custom", |
||||||
|
"var", |
||||||
|
"function", |
||||||
|
"return", |
||||||
|
"if", |
||||||
|
"else", |
||||||
|
"for", |
||||||
|
"while", |
||||||
|
"do", |
||||||
|
"log", |
||||||
|
"assert", |
||||||
|
"include", |
||||||
|
"pragma", |
||||||
|
], |
||||||
|
|
||||||
|
typeKeywords: ["input", "output", "public"], |
||||||
|
|
||||||
|
operators: [ |
||||||
|
"!", |
||||||
|
"~", |
||||||
|
"-", |
||||||
|
"||", |
||||||
|
"&&", |
||||||
|
"==", |
||||||
|
"!=", |
||||||
|
"<", |
||||||
|
">", |
||||||
|
"<=", |
||||||
|
">=", |
||||||
|
"|", |
||||||
|
"&", |
||||||
|
"<<", |
||||||
|
">>", |
||||||
|
"+", |
||||||
|
"-", |
||||||
|
"*", |
||||||
|
"/", |
||||||
|
"\\", |
||||||
|
"%", |
||||||
|
"**", |
||||||
|
"^", |
||||||
|
"=", |
||||||
|
"<--", |
||||||
|
"<==", |
||||||
|
], |
||||||
|
|
||||||
|
// we include these common regular expressions
|
||||||
|
// symbols: /[=><!~?:&|+\-*\/\^%]+/,
|
||||||
|
|
||||||
|
// C# style strings
|
||||||
|
escapes: |
||||||
|
/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/, |
||||||
|
|
||||||
|
// The main tokenizer for our languages
|
||||||
|
|
||||||
|
tokenizer: { |
||||||
|
root: [ |
||||||
|
// identifiers and keywords
|
||||||
|
[ |
||||||
|
/[a-z_$][\w$]*/, |
||||||
|
{ |
||||||
|
cases: { |
||||||
|
"@typeKeywords": "keyword", |
||||||
|
"@keywords": "keyword", |
||||||
|
"@default": "identifier", |
||||||
|
}, |
||||||
|
}, |
||||||
|
], |
||||||
|
[/[A-Z][\w\$]*/, "type.identifier"], // to show class names nicely
|
||||||
|
|
||||||
|
// whitespace
|
||||||
|
{ include: "@whitespace" }, |
||||||
|
|
||||||
|
// delimiters and operators
|
||||||
|
[/[{}()\[\]]/, "@brackets"], |
||||||
|
|
||||||
|
// [/[<>](?!@symbols)/, "@brackets"],
|
||||||
|
// [
|
||||||
|
// /@symbols/,
|
||||||
|
// { cases: { "@operators": "operator", "@default": "" } },
|
||||||
|
// ],
|
||||||
|
|
||||||
|
// @ annotations.
|
||||||
|
// As an example, we emit a debugging log message on these tokens.
|
||||||
|
// Note: message are supressed during the first load -- change some lines to see them.
|
||||||
|
[ |
||||||
|
/@\s*[a-zA-Z_\$][\w\$]*/, |
||||||
|
{ token: "annotation", log: "annotation token: $0" }, |
||||||
|
], |
||||||
|
|
||||||
|
// numbers
|
||||||
|
[/\d*\.\d+([eE][\-+]?\d+)?/, "number.float"], |
||||||
|
[/0[xX][0-9a-fA-F]+/, "number.hex"], |
||||||
|
[/\d+/, "number"], |
||||||
|
|
||||||
|
// delimiter: after number because of .\d floats
|
||||||
|
[/[;,.]/, "delimiter"], |
||||||
|
|
||||||
|
// strings
|
||||||
|
[/"([^"\\]|\\.)*$/, "string.invalid"], // non-teminated string
|
||||||
|
[/"/, { token: "string.quote", bracket: "@open", next: "@string" }], |
||||||
|
|
||||||
|
// characters
|
||||||
|
[/'[^\\']'/, "string"], |
||||||
|
[/(')(@escapes)(')/, ["string", "string.escape", "string"]], |
||||||
|
[/'/, "string.invalid"], |
||||||
|
], |
||||||
|
|
||||||
|
comment: [ |
||||||
|
[/[^\/*]+/, "comment"], |
||||||
|
[/\/\*/, "comment", "@push"], // nested comment
|
||||||
|
["\\*/", "comment", "@pop"], |
||||||
|
[/[\/*]/, "comment"], |
||||||
|
], |
||||||
|
|
||||||
|
string: [ |
||||||
|
[/[^\\"]+/, "string"], |
||||||
|
[/@escapes/, "string.escape"], |
||||||
|
[/\\./, "string.escape.invalid"], |
||||||
|
[/"/, { token: "string.quote", bracket: "@close", next: "@pop" }], |
||||||
|
], |
||||||
|
|
||||||
|
whitespace: [ |
||||||
|
[/[ \t\r\n]+/, "white"], |
||||||
|
[/\/\*/, "comment", "@comment"], |
||||||
|
[/\/\/.*$/, "comment"], |
||||||
|
], |
||||||
|
}, |
||||||
|
} |
Loading…
Reference in new issue