Skip to content

Commit ef87508

Browse files
committed
Implemented WhileWend diagnostic
1 parent f70eda2 commit ef87508

File tree

3 files changed

+25
-29
lines changed

3 files changed

+25
-29
lines changed

server/src/capabilities/diagnostics.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { CodeDescription, Diagnostic, DiagnosticRelatedInformation, DiagnosticSeverity, DiagnosticTag, Range, TextDocumentClientCapabilities } from 'vscode-languageserver';
1+
import { CodeDescription, Diagnostic, DiagnosticRelatedInformation, DiagnosticSeverity, DiagnosticTag, Position, Range, TextDocumentClientCapabilities } from 'vscode-languageserver';
22

33

44
function hasDiagnosticRelatedInformationCapability(x: TextDocumentClientCapabilities) {
@@ -33,7 +33,10 @@ export class WhileWendDeprecatedDiagnostic extends BaseDiagnostic {
3333
message = "The Do...Loop statement provides a more structured and flexible way to perform looping.";
3434
severity = DiagnosticSeverity.Information;
3535
constructor(range: Range) {
36-
super(range);
36+
super(Range.create(
37+
range.start,
38+
Position.create(range.start.line, range.start.character + 4)
39+
));
3740
}
3841
}
3942

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,20 @@
1-
import { ParserRuleContext } from 'antlr4ng';
2-
import { BaseContextSyntaxElement, HasDiagnosticCapability } from './base';
3-
import { TextDocument } from 'vscode-languageserver-textdocument';
41
import { Diagnostic } from 'vscode-languageserver';
2+
import { TextDocument } from 'vscode-languageserver-textdocument';
3+
import { WhileStatementContext } from '../../antlr/out/vbaParser';
4+
5+
import { BaseContextSyntaxElement, HasDiagnosticCapability } from './base';
56
import { WhileWendDeprecatedDiagnostic } from '../../capabilities/diagnostics';
67

78

8-
class BaseLoopElement extends BaseContextSyntaxElement {
9-
constructor(context: ParserRuleContext, document: TextDocument) {
9+
export class WhileLoopElement extends BaseContextSyntaxElement implements HasDiagnosticCapability {
10+
diagnostics: Diagnostic[] = [];
11+
12+
constructor(context: WhileStatementContext, document: TextDocument) {
1013
super(context, document);
14+
1115
}
12-
}
1316

14-
15-
// export class WhileWendLoopElement extends BaseLoopElement implements HasDiagnosticCapability {
16-
// diagnostics: Diagnostic[] = [];
17-
// valueStatement: ValueStatementElement;
18-
19-
// constructor(context: WhileWendStmtContext, document: TextDocument) {
20-
// super(context, document);
21-
// this.valueStatement = new ValueStatementElement(context.valueStmt(), document);
22-
// }
23-
24-
// evaluateDiagnostics(): void {
25-
// this.diagnostics.push(new WhileWendDeprecatedDiagnostic(this.valueStatement.range));
26-
// }
27-
// }
28-
29-
// class ValueStatementElement extends BaseContextSyntaxElement {
30-
// constructor(context: ValueStmtContext, document: TextDocument) {
31-
// super(context, document);
32-
// }
33-
// }
17+
evaluateDiagnostics(): void {
18+
this.diagnostics.push(new WhileWendDeprecatedDiagnostic(this.range))
19+
}
20+
}

server/src/project/parser/vbaSyntaxParser.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { TextDocument } from 'vscode-languageserver-textdocument';
22

33
import { vbaLexer } from '../../antlr/out/vbaLexer';
4-
import { ClassModuleContext, EnumDeclarationContext, IgnoredAttrContext, ProceduralModuleContext, ProcedureDeclarationContext, vbaParser } from '../../antlr/out/vbaParser';
4+
import { ClassModuleContext, EnumDeclarationContext, IgnoredAttrContext, ProceduralModuleContext, ProcedureDeclarationContext, WhileStatementContext, vbaParser } from '../../antlr/out/vbaParser';
55
import { vbaListener } from '../../antlr/out/vbaListener';
66

77
import { VbaClassDocument, VbaModuleDocument } from '../document';
@@ -10,6 +10,7 @@ import { CancellationToken } from 'vscode-languageserver';
1010
import { CharStream, CommonTokenStream, DefaultErrorStrategy, ParseTreeWalker, Parser, RecognitionException } from 'antlr4ng';
1111
import { ClassElement, IgnoredAttributeElement, ModuleElement } from '../elements/module';
1212
import { DeclarationElement, EnumDeclarationElement } from '../elements/memory';
13+
import { WhileLoopElement } from '../elements/flow';
1314

1415
export class SyntaxParser {
1516
private static _lockIdentifier = 0;
@@ -133,6 +134,11 @@ class VbaListener extends vbaListener {
133134
.registerScopedElement(element);
134135
};
135136

137+
enterWhileStatement = (ctx: WhileStatementContext) => {
138+
const element = new WhileLoopElement(ctx, this.document.textDocument);
139+
this.document.registerDiagnosticElement(element);
140+
};
141+
136142
// visitErrorNode(node: ErrorNode) {
137143
// console.log(node.payload);
138144
// }

0 commit comments

Comments
 (0)