mirror of
https://github.com/fofolee/uTools-quickcommand.git
synced 2025-09-24 13:03:30 +08:00
完善代码补全功能
This commit is contained in:
@@ -1,107 +0,0 @@
|
||||
<script type="text/javascript">
|
||||
const programs = {
|
||||
quickcommand: {
|
||||
name: "quickcommand",
|
||||
highlight: "javascript",
|
||||
bin: "",
|
||||
argv: "",
|
||||
ext: "",
|
||||
color: "#006e54",
|
||||
},
|
||||
shell: {
|
||||
name: "shell",
|
||||
bin: "bash",
|
||||
argv: "",
|
||||
ext: "sh",
|
||||
color: "#89e051",
|
||||
},
|
||||
applescript: {
|
||||
name: "applescript",
|
||||
bin: "osascript",
|
||||
argv: "",
|
||||
ext: "scpt",
|
||||
color: "#101F1F",
|
||||
},
|
||||
cmd: {
|
||||
name: "cmd",
|
||||
highlight: "bat",
|
||||
bin: "",
|
||||
argv: "",
|
||||
ext: "bat",
|
||||
color: "#C1F12E",
|
||||
},
|
||||
powershell: {
|
||||
name: "powershell",
|
||||
bin: "powershell",
|
||||
argv: "-NoProfile -File",
|
||||
ext: "ps1",
|
||||
color: "#012456",
|
||||
},
|
||||
python: {
|
||||
name: "python",
|
||||
bin: "python",
|
||||
argv: "-u",
|
||||
ext: "py",
|
||||
color: "#3572A5",
|
||||
},
|
||||
javascript: {
|
||||
name: "javascript",
|
||||
bin: "node",
|
||||
argv: "",
|
||||
ext: "js",
|
||||
color: "#f1e05a",
|
||||
},
|
||||
ruby: {
|
||||
name: "ruby",
|
||||
bin: "ruby",
|
||||
argv: "",
|
||||
ext: "rb",
|
||||
color: "#701516",
|
||||
},
|
||||
php: {
|
||||
name: "php",
|
||||
bin: "php",
|
||||
argv: "",
|
||||
ext: "php",
|
||||
color: "#4F5D95",
|
||||
},
|
||||
c: {
|
||||
name: "c",
|
||||
bin: "gcc",
|
||||
argv: "-o",
|
||||
ext: "c",
|
||||
color: "#555555",
|
||||
},
|
||||
csharp: {
|
||||
name: "csharp",
|
||||
bin: "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\csc.exe",
|
||||
argv: "/Nologo",
|
||||
ext: "cs",
|
||||
color: "#178600",
|
||||
},
|
||||
lua: {
|
||||
name: "lua",
|
||||
bin: "lua",
|
||||
argv: "",
|
||||
ext: "lua",
|
||||
color: "#000080",
|
||||
},
|
||||
perl: {
|
||||
name: "perl",
|
||||
bin: "perl",
|
||||
argv: "",
|
||||
ext: "pl",
|
||||
color: "#0298c3",
|
||||
},
|
||||
custom: {
|
||||
name: "custom",
|
||||
bin: "",
|
||||
argv: "",
|
||||
ext: "",
|
||||
color: "#438eff",
|
||||
},
|
||||
};
|
||||
export default {
|
||||
programs,
|
||||
};
|
||||
</script>
|
@@ -5,11 +5,17 @@
|
||||
<script>
|
||||
import * as monaco from "monaco-editor";
|
||||
import { toRaw } from "vue";
|
||||
import utoolsApi from "!raw-loader!../types/utools.api.d.ts";
|
||||
import quickcommandApi from "!raw-loader!../types/quickcommand.api.d.ts";
|
||||
import electronApi from "!raw-loader!../types/electron.d.ts";
|
||||
import nodeApi from "!raw-loader!../types/node.api.d.ts";
|
||||
import commonApi from "!raw-loader!../types/common.d.ts";
|
||||
import importAll from "../api/importAll.js";
|
||||
|
||||
// 批量导入声明文件
|
||||
let apis = importAll(
|
||||
require.context("!raw-loader!../plugins/monaco/types/", false, /\.ts$/)
|
||||
);
|
||||
|
||||
// 批量导入关键字补全
|
||||
let languageCompletions = importAll(
|
||||
require.context("../plugins/monaco/completions/", false, /\.js$/)
|
||||
);
|
||||
|
||||
export default {
|
||||
data() {
|
||||
@@ -36,6 +42,10 @@ export default {
|
||||
},
|
||||
}
|
||||
);
|
||||
this.loadTypes();
|
||||
this.registerLanguage();
|
||||
},
|
||||
loadTypes() {
|
||||
monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({
|
||||
noSemanticValidation: true,
|
||||
noSyntaxValidation: false,
|
||||
@@ -46,11 +56,82 @@ export default {
|
||||
allowJs: true,
|
||||
lib: [],
|
||||
});
|
||||
// 引入声明文件
|
||||
monaco.languages.typescript.javascriptDefaults.addExtraLib(
|
||||
quickcommandApi + utoolsApi + electronApi + nodeApi + commonApi,
|
||||
Object.values(apis)
|
||||
.map((x) => x.default)
|
||||
.join("\n"),
|
||||
"api.d.ts"
|
||||
);
|
||||
},
|
||||
registerLanguage() {
|
||||
let that = this;
|
||||
const identifierPattern = "([a-zA-Z_]\\w*)";
|
||||
let getTokens = (code) => {
|
||||
let identifier = new RegExp(identifierPattern, "g");
|
||||
let tokens = [];
|
||||
let array1;
|
||||
while ((array1 = identifier.exec(code)) !== null) {
|
||||
tokens.push(array1[0]);
|
||||
}
|
||||
return Array.from(new Set(tokens));
|
||||
};
|
||||
let createDependencyProposals = (range, keyWords, editor, curWord) => {
|
||||
let keys = [];
|
||||
let tokens = getTokens(editor.getModel().getValue());
|
||||
// 自定义变量、字符串
|
||||
for (const item of tokens) {
|
||||
if (item != curWord.word) {
|
||||
keys.push({
|
||||
label: item,
|
||||
kind: monaco.languages.CompletionItemKind.Text,
|
||||
documentation: "",
|
||||
insertText: item,
|
||||
range: range,
|
||||
});
|
||||
}
|
||||
}
|
||||
// 关键字、函数
|
||||
Object.keys(keyWords).forEach((ItemKind) => {
|
||||
keyWords[ItemKind].forEach((item) => {
|
||||
keys.push({
|
||||
label: item,
|
||||
kind: monaco.languages.CompletionItemKind[ItemKind],
|
||||
documentation: "",
|
||||
insertText: item,
|
||||
range: range,
|
||||
});
|
||||
});
|
||||
});
|
||||
return keys;
|
||||
};
|
||||
// 注册 applescript
|
||||
monaco.languages.register({
|
||||
id: "applescript",
|
||||
});
|
||||
// 注册自动补全
|
||||
Object.keys(languageCompletions).forEach((language) => {
|
||||
monaco.languages.registerCompletionItemProvider(language, {
|
||||
provideCompletionItems: function (model, position) {
|
||||
var word = model.getWordUntilPosition(position);
|
||||
var range = {
|
||||
startLineNumber: position.lineNumber,
|
||||
endLineNumber: position.lineNumber,
|
||||
startColumn: word.startColumn,
|
||||
endColumn: word.endColumn,
|
||||
};
|
||||
return {
|
||||
suggestions: createDependencyProposals(
|
||||
range,
|
||||
languageCompletions[language].default,
|
||||
toRaw(that.editor),
|
||||
word
|
||||
),
|
||||
};
|
||||
},
|
||||
});
|
||||
});
|
||||
},
|
||||
getEditorValue() {
|
||||
return toRaw(this.editor).getValue();
|
||||
},
|
||||
|
Reference in New Issue
Block a user