@@ -6,13 +6,16 @@ import { DiagnosticTag } from 'vscode-languageserver';
6
6
7
7
export const CODE_SEGMENT_DUPLICATE_YIELD = 'segment/duplicate-yield' ;
8
8
export const CODE_SEGMENT_UNASSIGNED_RESULT = 'segment/unassigned-result' ;
9
+ export const CODE_SEGMENT_UNUSED = 'segment/unused' ;
9
10
export const CODE_SEGMENT_UNUSED_PARAMETER = 'segment/unused-parameter' ;
10
11
11
- export const segmentResultMustBeAssignedExactlyOnce =
12
- ( services : SafeDsServices ) => ( node : SdsSegment , accept : ValidationAcceptor ) => {
12
+ export const segmentResultMustBeAssignedExactlyOnce = ( services : SafeDsServices ) => {
13
+ const nodeMapper = services . helpers . NodeMapper ;
14
+
15
+ return ( node : SdsSegment , accept : ValidationAcceptor ) => {
13
16
const results = getResults ( node . resultList ) ;
14
17
for ( const result of results ) {
15
- const yields = services . helpers . NodeMapper . resultToYields ( result ) ;
18
+ const yields = nodeMapper . resultToYields ( result ) ;
16
19
if ( yields . isEmpty ( ) ) {
17
20
accept ( 'error' , 'Nothing is assigned to this result.' , {
18
21
node : result ,
@@ -32,11 +35,35 @@ export const segmentResultMustBeAssignedExactlyOnce =
32
35
}
33
36
}
34
37
} ;
38
+ } ;
39
+
40
+ export const segmentShouldBeUsed = ( services : SafeDsServices ) => {
41
+ const referenceProvider = services . references . References ;
42
+
43
+ return ( node : SdsSegment , accept : ValidationAcceptor ) => {
44
+ // Don't show this warning for public segments
45
+ if ( node . visibility === undefined ) {
46
+ return ;
47
+ }
48
+
49
+ const references = referenceProvider . findReferences ( node , { } ) ;
50
+ if ( references . isEmpty ( ) ) {
51
+ accept ( 'warning' , 'This segment is unused and can be removed.' , {
52
+ node,
53
+ property : 'name' ,
54
+ code : CODE_SEGMENT_UNUSED ,
55
+ tags : [ DiagnosticTag . Unnecessary ] ,
56
+ } ) ;
57
+ }
58
+ } ;
59
+ } ;
60
+
61
+ export const segmentParameterShouldBeUsed = ( services : SafeDsServices ) => {
62
+ const nodeMapper = services . helpers . NodeMapper ;
35
63
36
- export const segmentParameterShouldBeUsed =
37
- ( services : SafeDsServices ) => ( node : SdsSegment , accept : ValidationAcceptor ) => {
64
+ return ( node : SdsSegment , accept : ValidationAcceptor ) => {
38
65
for ( const parameter of getParameters ( node ) ) {
39
- const usages = services . helpers . NodeMapper . parameterToReferences ( parameter ) ;
66
+ const usages = nodeMapper . parameterToReferences ( parameter ) ;
40
67
41
68
if ( usages . isEmpty ( ) ) {
42
69
accept ( 'warning' , 'This parameter is unused and can be removed.' , {
@@ -48,3 +75,4 @@ export const segmentParameterShouldBeUsed =
48
75
}
49
76
}
50
77
} ;
78
+ } ;
0 commit comments