Skip to content

Commit 9373a0a

Browse files
committed
Methods and functions now parsed.
1 parent d27eae5 commit 9373a0a

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed

server/src/project/elements/procedure.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,42 +19,39 @@ import { DiagnosticCapability, IdentifierCapability, SymbolInformationCapability
1919

2020
abstract class BaseProcedureElement<T extends ParserRuleContext> extends BaseContextSyntaxElement<T> implements HasDiagnosticCapability, HasSymbolInformationCapability {
2121
diagnosticCapability: DiagnosticCapability;
22+
symbolInformationCapability: SymbolInformationCapability;
2223
abstract identifierCapability: IdentifierCapability;
23-
abstract symbolInformationCapability: SymbolInformationCapability;
2424

25-
constructor(ctx: T, doc: TextDocument) {
25+
constructor(ctx: T, doc: TextDocument, symbolKind: SymbolKind) {
2626
super(ctx, doc);
2727
this.diagnosticCapability = new DiagnosticCapability(this);
28+
this.symbolInformationCapability = new SymbolInformationCapability(this, symbolKind);
2829
}
2930
}
3031

3132

3233
export class SubDeclarationElement extends BaseProcedureElement<SubroutineDeclarationContext> {
3334
identifierCapability: IdentifierCapability;
34-
symbolInformationCapability: SymbolInformationCapability;
3535

3636
constructor(ctx: SubroutineDeclarationContext, doc: TextDocument) {
37-
super(ctx, doc);
37+
super(ctx, doc, SymbolKind.Method);
3838
this.identifierCapability = new IdentifierCapability({
3939
element: this,
4040
getNameContext: () => ctx.subroutineName()?.ambiguousIdentifier(),
4141
});
42-
this.symbolInformationCapability = new SymbolInformationCapability(this, SymbolKind.Method);
4342
}
4443
}
4544

4645

4746
export class FunctionDeclarationElement extends BaseProcedureElement<FunctionDeclarationContext> {
4847
identifierCapability: IdentifierCapability;
49-
symbolInformationCapability: SymbolInformationCapability;
5048

5149
constructor(ctx: FunctionDeclarationContext, doc: TextDocument) {
52-
super(ctx, doc);
50+
super(ctx, doc, SymbolKind.Method);
5351
this.identifierCapability = new IdentifierCapability({
5452
element: this,
5553
getNameContext: () => ctx.functionName()?.ambiguousIdentifier(),
5654
});
57-
this.symbolInformationCapability = new SymbolInformationCapability(this, SymbolKind.Method);
5855
}
5956
}
6057

@@ -81,18 +78,16 @@ export class PropertyDeclarationElement {
8178
*/
8279
abstract class BasePropertyDeclarationElement<T extends ParserRuleContext> extends BaseProcedureElement<T> {
8380
identifierCapability: IdentifierCapability;
84-
symbolInformationCapability: SymbolInformationCapability;
8581

8682
private propertyType: string;
8783
private nameContext?: AmbiguousIdentifierContext;
8884

8985
get propertyName(): string { return `${this.identifierCapability.name.split(' ')[1]}`; }
9086

9187
constructor(ctx: T, doc: TextDocument, propertyType: string, nameCtx?: AmbiguousIdentifierContext) {
92-
super(ctx, doc);
88+
super(ctx, doc, SymbolKind.Property);
9389
this.nameContext = nameCtx;
9490
this.propertyType = propertyType;
95-
this.symbolInformationCapability = new SymbolInformationCapability(this, SymbolKind.Property);
9691
this.identifierCapability = new IdentifierCapability({
9792
element: this,
9893
getNameContext: () => this.nameContext,

server/src/project/parser/vbaListener.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
AnyOperatorContext,
88
ClassModuleContext,
99
EnumDeclarationContext,
10+
FunctionDeclarationContext,
1011
GlobalVariableDeclarationContext,
1112
IgnoredClassAttrContext,
1213
IgnoredProceduralAttrContext,
@@ -20,6 +21,7 @@ import {
2021
PublicConstDeclarationContext,
2122
PublicTypeDeclarationContext,
2223
PublicVariableDeclarationContext,
24+
SubroutineDeclarationContext,
2325
TypeSuffixContext,
2426
UdtDeclarationContext,
2527
WhileStatementContext
@@ -30,7 +32,7 @@ import { DuplicateOperatorElement, WhileLoopElement } from '../elements/flow';
3032
import { CompilerLogicalBlock, GenericCommentElement } from '../elements/precompiled';
3133
import { ClassElement, ModuleElement, ModuleIgnoredAttributeElement } from '../elements/module';
3234
import { DocumentSettings, VbaClassDocument, VbaModuleDocument } from '../document';
33-
import { PropertyGetDeclarationElement, PropertyLetDeclarationElement, PropertySetDeclarationElement } from '../elements/procedure';
35+
import { FunctionDeclarationElement, PropertyGetDeclarationElement, PropertyLetDeclarationElement, PropertySetDeclarationElement, SubDeclarationElement } from '../elements/procedure';
3436
import { DeclarationStatementElement, EnumDeclarationElement, TypeDeclarationElement, TypeSuffixElement } from '../elements/typing';
3537

3638

@@ -134,6 +136,16 @@ export class VbaListener extends vbaListener {
134136
.registerNamespaceElement(element);
135137
};
136138

139+
enterSubroutineDeclaration = (ctx: SubroutineDeclarationContext) => {
140+
const element = new SubDeclarationElement(ctx, this.document.textDocument);
141+
this.document.registerElement(element);
142+
}
143+
144+
enterFunctionDeclaration = (ctx: FunctionDeclarationContext) => {
145+
const element = new FunctionDeclarationElement(ctx, this.document.textDocument);
146+
this.document.registerElement(element);
147+
}
148+
137149
enterPublicTypeDeclaration = (ctx: PublicTypeDeclarationContext) => this.enterTypeDeclaration(ctx, true);
138150
enterPrivateTypeDeclaration = (ctx: PrivateTypeDeclarationContext) => this.enterTypeDeclaration(ctx, false);
139151
private enterTypeDeclaration = (ctx: PublicTypeDeclarationContext | PrivateTypeDeclarationContext, isPrivate: boolean) => {

0 commit comments

Comments
 (0)