UNPKG

@making-sense/antlr-editor

Version:
220 lines 8.7 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getVtlTheme = exports.getEditorWillMount = exports.getBracketsConfiguration = exports.getTheme = void 0; const EditorApi = __importStar(require("monaco-editor")); const grammarGraph_1 = require("../grammar-graph/grammarGraph"); const ParserFacade_1 = require("./ParserFacade"); const tokensProvider_1 = require("./tokensProvider"); const vocabularyPack_1 = require("./vocabularyPack"); const constants_1 = require("./constants"); const getTheme = () => { return { base: "vs", inherit: true, rules: [ { token: "string", foreground: "018B03" }, { token: "comment", foreground: "939393" }, { token: "operator", foreground: "8B3301" }, { token: "delimiter.bracket", foreground: "8B3301" }, { token: "operator.special", foreground: "8B3301", fontStyle: "bold" } ], colors: {} }; }; exports.getTheme = getTheme; const getBracketsConfiguration = () => { return { surroundingPairs: [ { open: "{", close: "}" }, { open: "(", close: ")" }, { open: "[", close: "]" } ], autoClosingPairs: [ { open: "{", close: "}" }, { open: "(", close: ")" }, { open: "[", close: "]" } ], brackets: [ ["{", "}"], ["(", ")"], ["[", "]"] ] }; }; exports.getBracketsConfiguration = getBracketsConfiguration; let completionItemDispose = undefined; const getEditorWillMount = (tools) => ({ variables, editor }) => { const { id } = tools; return (monaco) => { monaco.languages.register({ id }); if (tools.monarchDefinition) { const tokensProvider = new tokensProvider_1.TokensProvider(tools); monaco.languages.setMonarchTokensProvider(id, tokensProvider.monarchLanguage()); } monaco.editor.defineTheme(id, (0, exports.getTheme)()); monaco.editor.defineTheme("vtl-default", (0, exports.getVtlTheme)("vtl-default")); monaco.editor.defineTheme("vtl-light", (0, exports.getVtlTheme)("vtl-light")); monaco.editor.defineTheme("vtl-dark", (0, exports.getVtlTheme)("vtl-dark")); monaco.editor.defineTheme("vtl-black", (0, exports.getVtlTheme)("vtl-black")); monaco.languages.setLanguageConfiguration(id, (0, exports.getBracketsConfiguration)()); if (completionItemDispose) { completionItemDispose.dispose(); } completionItemDispose = monaco.languages.registerCompletionItemProvider(id, { provideCompletionItems: getSuggestions(tools, { variables }) }); //@ts-ignore const { widget } = editor.getContribution("editor.contrib.suggestController"); if (widget) { const suggestWidget = widget.value; suggestWidget._setDetailsVisible(true); } }; }; exports.getEditorWillMount = getEditorWillMount; const buildGrammarGraph = (tools) => { const { Lexer, Parser, grammar } = tools; const lexer = (0, ParserFacade_1.createLexer)(Lexer)(""); const parser = (0, ParserFacade_1.createParser)({ Lexer, Parser })(""); const vocabulary = new vocabularyPack_1.VocabularyPack(lexer, parser); const grammarGraph = new grammarGraph_1.GrammarGraph(vocabulary, grammar); return grammarGraph; }; const getVtlTheme = (name) => { switch (name) { case "vtl-default": { return { base: "vs", inherit: true, rules: [ { token: "string", foreground: "018B03" }, { token: "comment", foreground: "939393" }, { token: "operator", foreground: "8B3301" }, { token: "attribute", foreground: "9ffb88" }, { token: "dimension", foreground: "f7b74e" }, { token: "primaryMeasure", foreground: "953d55" }, { token: "delimiter.bracket", foreground: "8B3301" }, { token: "operator.special", foreground: "8B3301", fontStyle: "bold" } ], colors: {} }; } case "vtl-light": { return { base: "vs", inherit: true, rules: [ { token: "attribute", foreground: "9ffb88" }, { token: "dimension", foreground: "f7b74e" }, { token: "primaryMeasure", foreground: "953d55" } ], colors: {} }; } case "vtl-dark": { return { base: "vs-dark", inherit: true, rules: [ { token: "attribute", foreground: "9ffb88" }, { token: "dimension", foreground: "f7b74e" }, { token: "primaryMeasure", foreground: "953d55" } ], colors: {} }; } case "vtl-black": { return { base: "hc-black", inherit: true, rules: [ { token: "attribute", foreground: "9ffb88" }, { token: "dimension", foreground: "f7b74e" }, { token: "primaryMeasure", foreground: "953d55" } ], colors: {} }; } } return { base: "vs", colors: {}, inherit: true, rules: [] }; }; exports.getVtlTheme = getVtlTheme; const getSuggestions = (tools, { variables }) => { return function (model, position) { const textUntilPosition = model.getValueInRange({ startLineNumber: 1, startColumn: 1, endLineNumber: position.lineNumber, endColumn: position.column }); const word = model.getWordUntilPosition(position); const range = { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: word.startColumn, endColumn: word.endColumn }; let uniquetext = Array.from(new Set(textUntilPosition .replace(/"(.*?)"/g, "") .replace(/[^a-zA-Z_]/g, " ") .split(" ") .filter(w => w !== "")).values()); buildGrammarGraph(tools); const { getSuggestionsFromRange = () => [] } = tools; const grammarSuggestions = getSuggestionsFromRange(range); const suggestionList = grammarSuggestions.length !== 0 ? grammarSuggestions : buildGrammarGraph(tools).suggestions(); uniquetext = removeLanguageSyntaxFromList(uniquetext, suggestionList); const array = uniquetext.map(w => { return { label: w, kind: EditorApi.languages.CompletionItemKind.Variable, insertText: w }; }); const vars = (variables || []).map(({ label, name }) => ({ label, kind: constants_1.VARIABLE, insertText: name, range })); return { suggestions: [...array, ...vars, ...suggestionList] }; }; function removeLanguageSyntaxFromList(vars, suggestionList) { const suggestionsLabels = suggestionList.map(s => s.label.toLowerCase()); return vars.filter(t => !suggestionsLabels.includes(t.toLowerCase())); } }; //# sourceMappingURL=providers.js.map