网站搜索

typescript - 在取消注释方法中未使用的部分代码后,Monaco 网页编辑器无法工作


我尝试在 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 编辑器无法处理语言功能——语法着色、格式化和错误高亮。

但是如果我把自动建议方法改成如下,一切都能正常工作,当然没有建议:

 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 警告 已弃用 [email :v3.0.1 已修复关键漏洞,请升级到最新版本。npm 警告 已弃用 [email :v3.0.1 已修复关键漏洞,请升级到最新版本。npm 警告 已弃用 [email :请参阅 https://github.com/lydell/urix#deprecated npm 警告 已弃用 [email :Chokidar 2 自 2019 起不再接收安全更新。请升级到依赖减少 15 倍的 Chokidar 3 npm 警告 已弃用 [email :Chokidar 2 自 2019 起不再接收安全更新。请升级到依赖减少 15 倍的 Chokidar 3 npm 警告 已弃用 [email :https://github. com/lydell/resolve-url#已弃用 npm 警告 已弃用 [email :请参见 https://github.com/lydell/source-map-url#deprecated npm 警告 已弃用 [email :3.x 不再受支持 npm 警告 已弃用 [email :querystring API 被认为是旧的。新代码应改用 URLSearchParams API。 npm 警告 已弃用 [email :请升级到版本 7 或更高版本。旧版本在某些情况下可能使用 Math.random(),这已知存在问题。详情请参见 https://v8.dev/blog/math-random npm 警告 已弃用 [email :请参见 https://github.com/lydell/source-map-resolve#deprecated

添加了 726 个软件包,并在 4 秒内审计了 727 个软件包

有 63 个包正在寻求资金支持 运行 npm fund 获取详情

17 个漏洞(1 个中等,8 个高,8 个严重)

要解决不需要注意的问题,请运行:npm audit fix

要解决所有问题(包括重大更改),请运行:npm audit fix --force

运行 npm audit 获取详细信息。

如何解决这个问题?