@@ -12,9 +12,11 @@ abstract class BaseModuleElement extends ScopeElement implements HasSymbolInform
1212 protected abstract _name : string ;
1313 symbolKind : SymbolKind ;
1414 diagnostics : Diagnostic [ ] = [ ] ;
15+ context : ProceduralModuleContext | ClassModuleContext ;
1516
1617 constructor ( context : ProceduralModuleContext | ClassModuleContext , document : TextDocument , symbolKind : SymbolKind ) {
1718 super ( context , document ) ;
19+ this . context = context ;
1820 this . symbolKind = symbolKind ;
1921 }
2022
@@ -29,6 +31,32 @@ abstract class BaseModuleElement extends ScopeElement implements HasSymbolInform
2931 }
3032
3133 abstract evaluateDiagnostics ( ) : void ;
34+
35+ protected get _hasOptionExplicit ( ) : boolean {
36+ const getCodeElements = ( ) => {
37+ if ( this . _isClassModule ( this . context ) ) {
38+ return this . context . classModuleBody ( ) . classModuleCode ( ) . classModuleCodeElement ( )
39+ }
40+ return this . context . proceduralModuleBody ( ) . proceduralModuleCode ( ) . proceduralModuleCodeElement ( ) ;
41+ }
42+ const codeElements = getCodeElements ( )
43+ if ( ! codeElements ) {
44+ return false ;
45+ }
46+
47+ for ( const declaration of codeElements ) {
48+ const element = declaration . commonModuleCodeElement ( ) ;
49+ if ( element && element . commonOptionDirective ( ) ?. optionExplicitDirective ( ) ) {
50+ return true ;
51+ }
52+ }
53+
54+ return false ;
55+ }
56+
57+ private _isClassModule ( context : ProceduralModuleContext | ClassModuleContext ) : context is ClassModuleContext {
58+ return 'classModuleHeader' in context ;
59+ }
3260}
3361
3462export class ModuleElement extends BaseModuleElement {
@@ -42,7 +70,7 @@ export class ModuleElement extends BaseModuleElement {
4270 }
4371
4472 evaluateDiagnostics ( ) : void {
45- if ( ! this . _hasOptionExplicit ( ) ) {
73+ if ( ! this . _hasOptionExplicit ) {
4674 const header = this . context . proceduralModuleHeader ( ) ;
4775 const startLine = header . stop ?. line ?? 0 + 1 ;
4876 this . diagnostics . push ( new MissingOptionExplicitDiagnostic (
@@ -67,21 +95,6 @@ export class ModuleElement extends BaseModuleElement {
6795
6896 return name ?. stripQuotes ( ) ?? 'Unknown Module' ;
6997 }
70-
71- private _hasOptionExplicit ( ) : boolean {
72- const moduleDeclarations = this . context . proceduralModuleBody ( ) . proceduralModuleDeclarationSection ( ) ?. proceduralModuleDeclarationElement ( ) ;
73- if ( ! moduleDeclarations ) {
74- return false ;
75- }
76-
77- for ( const declaration of moduleDeclarations ) {
78- if ( declaration . commonOptionDirective ( ) ?. optionExplicitDirective ( ) ) {
79- return true ;
80- }
81- }
82-
83- return false ;
84- }
8598}
8699
87100export class ClassElement extends BaseModuleElement {
@@ -95,7 +108,7 @@ export class ClassElement extends BaseModuleElement {
95108 }
96109
97110 evaluateDiagnostics ( ) : void {
98- if ( ! this . _hasOptionExplicit ( ) ) {
111+ if ( ! this . _hasOptionExplicit ) {
99112 const header = this . context . classModuleHeader ( ) ;
100113 const startLine = header . stop ?. line ?? 0 + 1 ;
101114 this . diagnostics . push ( new MissingOptionExplicitDiagnostic (
@@ -121,21 +134,6 @@ export class ClassElement extends BaseModuleElement {
121134 const nameAttribute = nameAttributes [ 0 ] ;
122135 return nameAttribute . STRINGLITERAL ( ) . getText ( ) . stripQuotes ( ) ;
123136 }
124-
125- private _hasOptionExplicit ( ) : boolean {
126- const moduleDeclarations = this . context . classModuleBody ( ) . classModuleDeclarationSection ( ) ?. classModuleDeclarationElement ( ) ;
127- if ( ! moduleDeclarations ) {
128- return false ;
129- }
130-
131- for ( const declaration of moduleDeclarations ) {
132- if ( declaration . commonOptionDirective ( ) ?. optionExplicitDirective ( ) ) {
133- return true ;
134- }
135- }
136-
137- return false ;
138- }
139137}
140138
141139export class IgnoredAttributeElement extends BaseContextSyntaxElement implements HasDiagnosticCapability {
@@ -148,7 +146,7 @@ export class IgnoredAttributeElement extends BaseContextSyntaxElement implements
148146 evaluateDiagnostics ( ) : void {
149147 this . diagnostics . push (
150148 new IgnoredAttributeDiagnostic ( this . range )
151- )
149+ ) ;
152150 }
153151
154152}
0 commit comments