我尝试在 Monaco 网络编辑器上添加建议,但遇到了一个非常奇怪的问题。考虑班级:
import { ExpressionContext } from "../ANTLR/ExpressionsParserGrammarParser";
import * as monaco from "monaco-editor-core";
import { ILanguageError } from "../todo-lang/ILanguageError";
import { calcFormatted } from "../todo-lang/FormatterVisitor";
import { parseAndGetASTRoot, parseAndGetSyntaxErrors } from "../todo-lang/parser";
export default class TodoLangLanguageService {
validate(code: string): ILanguageError[] {
const syntaxErrors: ILanguageError[] = parseAndGetSyntaxErrors(code);
const ast: ExpressionContext = parseAndGetASTRoot(code);
return syntaxErrors;//.concat(checkSemanticRules(ast));
}
format(code: string): string {
return calcFormatted(code).value
}
autoSuggest(code: string, line: number, charPosInLine: number): monaco.languages.CompletionList {
const syntaxErrors: ILanguageError[] = parseAndGetSyntaxErrors(code);
let completeonItems: Array<monaco.languages.CompletionItem> = syntaxErrors.filter(err => err.startLineNumber == line && err.startColumn == charPosInLine).map(e => {
let ci: monaco.languages.CompletionItem = {
label: e.message,
/**
* The kind of this completion item. Based on the kind
* an icon is chosen by the editor.
*/
kind: monaco.languages.CompletionItemKind.Field,
insertText: e.message,
range: {
/**
* Line number on which the range starts (starts at 1).
*/
startLineNumber: e.startLineNumber,
/**
* Column on which the range starts in line `startLineNumber` (starts at 1).
*/
startColumn: e.startColumn,
/**
* Line number on which the range ends.
*/
endLineNumber: e.endLineNumber,
/**
* Column on which the range ends in line `endLineNumber`.
*/
endColumn: e.endColumn
}
}
return ci;
})
let ci:monaco.languages.CompletionList={
suggestions:completeonItems
}
return ci;
}
}
源代码中没有使用“autosuggest”方法(我已经注释掉了)。问题是 Monaco Web Editor 不处理语言功能——语法着色、格式化和错误突出显示。
但是如果我按照下面的方式更改自动建议方法,一切正常,当然没有建议:
autoSuggest(code: string, line: number, charPosInLine: number): monaco.languages.CompletionList {
const syntaxErrors: ILanguageError[] = parseAndGetSyntaxErrors(code);
let ci:monaco.languages.CompletionList={
suggestions:[]
}
return ci;
}
我的 package.json 如下:
{
"name": "todolangeditor",
"version": "1.0.0",
"description": "TodoLang editor",
"scripts": {
"start": "webpack-dev-server --hot --open",
"antlr4ts": "antlr4ts ./ExpressionsParserGrammar.g4 -visitor -o ./src/ANTLR"
},
"author": "Open",
"license": "ISC",
"dependencies": {
"antlr4ts": "^0.5.0-alpha.3",
"monaco-editor-core": "^0.18.1",
"react": "^16.8.6",
"react-dom": "^16.8.6"
},
"devDependencies": {
"@types/react": "^16.8.12",
"@types/react-dom": "^16.8.3",
"antlr4ts-cli": "^0.5.0-alpha.3",
"css-loader": "^3.3.0",
"html-webpack-plugin": "^3.2.0",
"style-loader": "^1.0.1",
"ts-loader": "^5.3.3",
"typescript": "^3.4.2",
"webpack": "^4.29.6",
"webpack-cli": "^3.3.0",
"webpack-dev-server": "^3.2.1"
}
}
当我运行 npm install 时,我有以下日志,有几个警告但没有错误:
npm WARN deprecated [email protected]:在 v3.0.1 中修复了严重错误, 请升级到最新版本。 npm WARN 已弃用 [email protected]: v3.0.1修复严重bug,请升级到 最新版本。 npm WARN 已弃用 [email protected]:请参阅 https://github.com/lydell/urix#deprecated npm WARN 已弃用 [email protected]:Chokidar 2 没有收到安全更新,因为 2019. 升级到 chokidar 3,依赖性减少 15 倍 npm WARN deprecated [email protected]:Chokidar 2 没有获得安全性 自 2019 年以来的更新。升级到 chokidar 3,依赖项减少 15 倍 npm WARN 已弃用 [email protected]: https://github.com/lydell/resolve-url#deprecated npm WARN 已弃用 [email protected]:见 https://github.com/lydell/source-map-url#deprecated npm 警告 已弃用的 [email protected]:不再支持 3.x npm WARN deprecated [email protected]: querystring API被认为是 遗产。新代码应该改用 URLSearchParams API。 npm 警告 已弃用 [email protected]:请升级到版本 7 或更高版本。年长的 版本可能在某些情况下使用 Math.random() ,这是 已知是有问题的。请参阅 https://v8.dev/blog/math-random 细节。 npm WARN 已弃用 [email protected]:请参阅 https://github.com/lydell/source-map-resolve#deprecated
4秒新增726个包,审核727个包
63包正在找funding run
详情npm fund
17 个漏洞(1 个中等、8 个高、8 个严重)
解决不需要关注的问题,运行:npm audit fix
要解决所有问题(包括重大更改),请运行:npm audit 修复 --force
运行
了解详情。npm audit
如何解决这个问题?