Skip to content

Commit 941373b

Browse files
committed
improve extension.ts: error msg and logical
1 parent b18c037 commit 941373b

3 files changed

Lines changed: 43 additions & 39 deletions

File tree

out/extension.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

out/extension.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/extension.ts

Lines changed: 41 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -73,48 +73,52 @@ function updateFeatureStatus() {
7373

7474
if (vscode.workspace.getConfiguration('flink-sql-grammar-check').get('enable')) {
7575
// 创建诊断集合,用于报告语法错误和警告
76-
const diagnosticCollection = vscode.languages.createDiagnosticCollection('flink-sql');
76+
const diagnosticCollection = vscode.languages.createDiagnosticCollection(selector);
7777

7878
// 监听文件更改事件
7979
vscode.workspace.onDidChangeTextDocument((event: vscode.TextDocumentChangeEvent) => {
8080
// 检查文件是否为Flink SQL文件
81-
if (event.document.languageId === 'flink-sql') {
82-
// 清除之前的诊断信息
83-
diagnosticCollection.clear();
84-
85-
// 使用生成的词法分析器和解析器进行语法检查
86-
const inputStream = new ANTLRInputStream(event.document.getText());
87-
const lexer = new FlinkSQLLexer(inputStream);
88-
const tokenStream = new CommonTokenStream(lexer);
89-
const parser = new FlinkSQLParser(tokenStream);
90-
parser.removeErrorListeners();
91-
parser.addErrorListener({
92-
syntaxError: (recognizer: Recognizer<any, any>, offendingSymbol: any, line: number, charPositionInLine: number, msg: string, e: RecognitionException | undefined): void => {
93-
vscode.window.showInformationMessage("parser error: line " + line + " position: " + charPositionInLine + " msg: " + msg);
94-
},
95-
})
96-
parser.compileParseTreePattern
97-
// 解析文件内容并获取语法树
98-
const parseTree = parser.program();
99-
100-
// 创建访问器实例并访问语法树,以获取语法错误和警告
101-
const visitor = new MyFlinkSqlVisitor();
102-
visitor.visit(parseTree);
103-
const errors = visitor.getErrors();
104-
console.log("visitor errors: " + errors);
105-
// 使用VSCode的诊断API报告语法错误和警告
106-
const diagnostics: vscode.Diagnostic[] = errors.map(error => {
107-
const range = new vscode.Range(
108-
109-
event.document.positionAt(error.getStartIndex()),
110-
event.document.positionAt(error.getStopIndex() + 1)
111-
);
112-
const diagnostic = new vscode.Diagnostic(range, error.message, vscode.DiagnosticSeverity.Error);
113-
return diagnostic;
114-
});
115-
116-
diagnosticCollection.set(event.document.uri, diagnostics);
81+
if (event.document.languageId !== selector) {
82+
return;
11783
}
84+
// 清除之前的诊断信息
85+
diagnosticCollection.clear();
86+
87+
// 使用生成的词法分析器和解析器进行语法检查
88+
const inputStream = new ANTLRInputStream(event.document.getText());
89+
const lexer = new FlinkSQLLexer(inputStream);
90+
const tokenStream = new CommonTokenStream(lexer);
91+
const parser = new FlinkSQLParser(tokenStream);
92+
parser.removeErrorListeners();
93+
parser.addErrorListener({
94+
syntaxError: (recognizer: Recognizer<any, any>, offendingSymbol: any, line: number, charPositionInLine: number, msg: string, e: RecognitionException | undefined): void => {
95+
vscode.window.showErrorMessage("Parser flink sql error. line: " + line + " position: " + charPositionInLine + " msg: " + msg);
96+
},
97+
})
98+
parser.compileParseTreePattern
99+
// 解析文件内容并获取语法树
100+
const parseTree = parser.program();
101+
102+
// 创建访问器实例并访问语法树,以获取语法错误和警告
103+
const visitor = new MyFlinkSqlVisitor();
104+
visitor.visit(parseTree);
105+
const errors = visitor.getErrors();
106+
errors.forEach(error => {
107+
vscode.window.showInformationMessage("Visitor flink sql error. error: " + error);
108+
})
109+
110+
// 使用VSCode的诊断API报告语法错误和警告
111+
// const diagnostics: vscode.Diagnostic[] = errors.map(error => {
112+
// const range = new vscode.Range(
113+
// event.document.positionAt(error.getStartIndex()),
114+
// event.document.positionAt(error.getStopIndex() + 1)
115+
// );
116+
// const diagnostic = new vscode.Diagnostic(range, error.message, vscode.DiagnosticSeverity.Error);
117+
// return diagnostic;
118+
// });
119+
120+
// diagnosticCollection.set(event.document.uri, diagnostics);
121+
118122
});
119123
}
120124
}

0 commit comments

Comments
 (0)