修复非JS代码无补全BUG,添加applescript语法高亮

This commit is contained in:
fofolee
2025-02-22 17:42:17 +08:00
parent 09b201907d
commit a7b4418945
2 changed files with 61 additions and 24 deletions

View File

@@ -250,10 +250,10 @@ export default defineComponent({
}
return Array.from(new Set(tokens));
};
let createDependencyProposals = (range, keyWords, editor, curWord) => {
let createDependencyProposals = (range, completions, curWord) => {
let keys = [];
// fix getValue of undefined
const tokens = getTokens(editor.getModel()?.getValue());
const tokens = getTokens(this.codeEditor.getModel()?.getValue());
// 自定义变量、字符串
for (const item of tokens) {
if (item != curWord.word) {
@@ -267,8 +267,9 @@ export default defineComponent({
}
}
// 关键字、函数
Object.keys(keyWords).forEach((ItemKind) => {
keyWords[ItemKind].forEach((item) => {
Object.keys(completions).forEach((ItemKind) => {
if (!Array.isArray(completions[ItemKind])) return;
completions[ItemKind].forEach((item) => {
keys.push({
label: item,
kind: monaco.languages.CompletionItemKind[ItemKind],
@@ -288,6 +289,7 @@ export default defineComponent({
Object.keys(languageCompletions).forEach((language) => {
// 防止自动补全被多次注册
if (monacoCompletionProviders[language]) return;
const completions = languageCompletions[language].default;
monaco.languages.registerCompletionItemProvider(language, {
provideCompletionItems: function (model, position) {
var word = model.getWordUntilPosition(position);
@@ -298,15 +300,22 @@ export default defineComponent({
endColumn: word.endColumn,
};
return {
suggestions: createDependencyProposals(
range,
languageCompletions[language].default,
editor,
word
),
suggestions: createDependencyProposals(range, completions, word),
};
},
});
if (language === "applescript") {
const { Keyword, Tokenizer, Operator, Symbol } = completions;
// applescript 需要再添加语法高亮定义
monaco.languages.setMonarchTokensProvider("applescript", {
defaultToken: "",
tokenPostfix: ".applescript",
keywords: Keyword,
operators: Operator,
symbols: Symbol,
tokenizer: Tokenizer,
});
}
monacoCompletionProviders[language] = true;
});
},
@@ -355,13 +364,12 @@ export default defineComponent({
}
},
getHighlighter(language) {
if (["quickcommand", "javascript", "webjavascript"].includes(language)) {
return "javascript";
}
if (language === "cmd") {
return "bat";
}
return language;
const highLightLanguageDict = {
quickcommand: "javascript",
webjavascript: "javascript",
cmd: "bat",
};
return highLightLanguageDict[language] || language;
},
setCursorPosition(position) {
if (!position.lineNumber || !position.column) return;