@@ -14,15 +14,15 @@ import { ParserRuleContext, TerminalNode } from 'antlr4ng';
1414// Project
1515import { SemanticToken } from '../capabilities/semanticTokens' ;
1616import { FoldingRange , FoldingRangeKind } from '../capabilities/folding' ;
17- import { BaseContextSyntaxElement , BaseIdentifyableSyntaxElement , Context , HasSemanticTokenCapability } from '../project/elements/base' ;
17+ import { BaseRuleSyntaxElement , BaseIdentifyableSyntaxElement , BaseSyntaxElement , Context , HasSemanticTokenCapability } from '../project/elements/base' ;
1818import { BaseDiagnostic , DuplicateDeclarationDiagnostic , MethodVariableIsPublicDiagnostic , ShadowDeclarationDiagnostic , SubOrFunctionNotDefinedDiagnostic , VariableNotDefinedDiagnostic } from './diagnostics' ;
1919import { Services } from '../injection/services' ;
2020
2121
2222abstract class BaseCapability {
23- element : BaseContextSyntaxElement < ParserRuleContext > ;
23+ element : BaseRuleSyntaxElement < ParserRuleContext > | BaseSyntaxElement ;
2424
25- constructor ( element : BaseContextSyntaxElement < ParserRuleContext > ) {
25+ constructor ( element : BaseRuleSyntaxElement < ParserRuleContext > | BaseSyntaxElement ) {
2626 this . element = element ;
2727 }
2828}
@@ -34,17 +34,20 @@ export class FoldingRangeCapability extends BaseCapability {
3434 closeWord ?: string ;
3535
3636 get foldingRange ( ) : FoldingRange {
37- const trailingLineCount = this . element . context . rule . countTrailingLineEndings ( ) ;
38- const start = this . element . context . range . start ;
37+ // Cast the element to the same type we get in the constructor.
38+ const element = this . element as unknown as BaseRuleSyntaxElement < ParserRuleContext > ;
39+
40+ const trailingLineCount = element . context . rule . countTrailingLineEndings ( ) ;
41+ const start = element . context . range . start ;
3942 const end = {
40- line : this . element . context . range . end . line - trailingLineCount ,
41- character : this . element . context . range . end . character
43+ line : element . context . range . end . line - trailingLineCount ,
44+ character : element . context . range . end . character
4245 } ;
4346 const range = Range . create ( start , end ) ;
4447 return new FoldingRange ( range , this . foldingRangeKind , this . openWord , this . closeWord ) ;
4548 }
4649
47- constructor ( element : BaseContextSyntaxElement < ParserRuleContext > , foldingRangeKind ?: FoldingRangeKind ) {
50+ constructor ( element : BaseRuleSyntaxElement < ParserRuleContext > , foldingRangeKind ?: FoldingRangeKind ) {
4851 super ( element ) ;
4952 this . foldingRangeKind = foldingRangeKind ;
5053 }
@@ -55,7 +58,7 @@ export class DiagnosticCapability extends BaseCapability {
5558 diagnostics : Diagnostic [ ] = [ ] ;
5659 evaluate : ( ...args : any [ ] ) => Diagnostic [ ] ;
5760
58- constructor ( element : BaseContextSyntaxElement < ParserRuleContext > , evaluate ?: ( ...args : any [ ] ) => Diagnostic [ ] ) {
61+ constructor ( element : BaseSyntaxElement , evaluate ?: ( ...args : any [ ] ) => Diagnostic [ ] ) {
5962 super ( element ) ;
6063 this . evaluate = evaluate ?? ( ( ) => this . diagnostics ) ;
6164 }
@@ -69,7 +72,7 @@ export class SemanticTokenCapability extends BaseCapability {
6972 private overrideLength ?: number ;
7073
7174 get semanticToken ( ) : SemanticToken {
72- const element = this . element as BaseContextSyntaxElement < ParserRuleContext > & HasSemanticTokenCapability ;
75+ const element = this . element as BaseRuleSyntaxElement < ParserRuleContext > & HasSemanticTokenCapability ;
7376 const context = element . identifierCapability
7477 ? new Context ( element . identifierCapability . nameContext , element . context . document )
7578 : element . context ;
@@ -89,7 +92,7 @@ export class SemanticTokenCapability extends BaseCapability {
8992 ) ;
9093 }
9194
92- constructor ( element : BaseContextSyntaxElement < ParserRuleContext > & HasSemanticTokenCapability , tokenType : SemanticTokenTypes , tokenModifiers : SemanticTokenModifiers [ ] , overrideRange ?: Range , overrideLength ?: number ) {
95+ constructor ( element : BaseRuleSyntaxElement < ParserRuleContext > & HasSemanticTokenCapability , tokenType : SemanticTokenTypes , tokenModifiers : SemanticTokenModifiers [ ] , overrideRange ?: Range , overrideLength ?: number ) {
9396 super ( element ) ;
9497 this . tokenType = tokenType ;
9598 this . tokenModifiers = tokenModifiers ;
@@ -119,7 +122,7 @@ export class SymbolInformationCapability extends BaseCapability {
119122}
120123
121124interface IdentifierArgs {
122- element : BaseContextSyntaxElement < ParserRuleContext > ,
125+ element : BaseRuleSyntaxElement < ParserRuleContext > ,
123126 getNameContext ?: ( ) => ParserRuleContext | TerminalNode | null | undefined ,
124127 formatName ?: ( name : string ) => string ,
125128 defaultName ?: string ;
@@ -217,7 +220,7 @@ export class ScopeItemCapability {
217220 visibilityModifierContext ?: ParserRuleContext ;
218221
219222 constructor (
220- readonly element ?: BaseContextSyntaxElement < ParserRuleContext > ,
223+ readonly element ?: BaseRuleSyntaxElement < ParserRuleContext > ,
221224 public type : ItemType = ItemType . REFERENCE ,
222225 public assignmentType : AssignmentType = AssignmentType . NONE ,
223226 public parent ?: ScopeItemCapability ,
0 commit comments