3030import com .github ._1c_syntax .bsl .languageserver .context .ServerContext ;
3131import com .github ._1c_syntax .bsl .languageserver .diagnostics .metadata .DiagnosticInfo ;
3232import com .github ._1c_syntax .bsl .languageserver .diagnostics .metadata .DiagnosticParameterInfo ;
33- import com .github ._1c_syntax .bsl .parser .BSLLexer ;
3433import com .github ._1c_syntax .bsl .sonar .language .BSLLanguage ;
3534import com .github ._1c_syntax .bsl .sonar .language .BSLLanguageServerRuleDefinition ;
3635import com .github ._1c_syntax .utils .Absolute ;
5049import org .sonar .api .batch .sensor .SensorDescriptor ;
5150import org .sonar .api .batch .sensor .coverage .NewCoverage ;
5251import org .sonar .api .batch .sensor .cpd .NewCpdTokens ;
53- import org .sonar .api .batch .sensor .highlighting .NewHighlighting ;
54- import org .sonar .api .batch .sensor .highlighting .TypeOfText ;
5552import org .sonar .api .measures .CoreMetrics ;
5653import org .sonar .api .measures .FileLinesContext ;
5754import org .sonar .api .measures .FileLinesContextFactory ;
5855import org .sonar .api .rule .RuleKey ;
5956import org .sonar .api .utils .log .Logger ;
6057import org .sonar .api .utils .log .Loggers ;
6158
62- import javax .annotation .Nullable ;
6359import java .io .File ;
6460import java .io .IOException ;
6561import java .net .URI ;
@@ -84,6 +80,7 @@ public class BSLCoreSensor implements Sensor {
8480 private final boolean langServerEnabled ;
8581 private final List <String > sourcesList ;
8682 private final IssuesLoader issuesLoader ;
83+ private final BSLHighlighter highlighter ;
8784
8885 private final boolean calculateCoverLoc ;
8986
@@ -105,6 +102,7 @@ public BSLCoreSensor(SensorContext context, FileLinesContextFactory fileLinesCon
105102 .orElse (Collections .singletonList ("." ));
106103
107104 issuesLoader = new IssuesLoader (context );
105+ highlighter = new BSLHighlighter (context );
108106 }
109107
110108 @ Override
@@ -195,7 +193,7 @@ private void processFile(InputFile inputFile, ServerContext bslServerContext) {
195193 }
196194
197195 saveCpd (inputFile , documentContext );
198- saveHighlighting (inputFile , documentContext );
196+ highlighter . saveHighlighting (inputFile , documentContext );
199197 saveMeasures (inputFile , documentContext );
200198
201199 saveCoverageLoc (inputFile , documentContext );
@@ -230,34 +228,6 @@ private void saveCpd(InputFile inputFile, DocumentContext documentContext) {
230228
231229 }
232230
233- private void saveHighlighting (InputFile inputFile , DocumentContext documentContext ) {
234-
235- NewHighlighting highlighting = context .newHighlighting ().onFile (inputFile );
236-
237- documentContext .getTokens ().forEach ((Token token ) -> {
238- TypeOfText typeOfText = getTypeOfText (token .getType ());
239-
240- if (typeOfText == null ) {
241- return ;
242- }
243-
244- int line = token .getLine ();
245- int charPositionInLine = token .getCharPositionInLine ();
246- String tokenText = token .getText ();
247-
248- highlighting .highlight (
249- line ,
250- charPositionInLine ,
251- line ,
252- charPositionInLine + tokenText .length (),
253- typeOfText
254- );
255- });
256-
257- highlighting .save ();
258-
259- }
260-
261231 private void saveMeasures (InputFile inputFile , DocumentContext documentContext ) {
262232
263233 MetricStorage metrics = documentContext .getMetrics ();
@@ -401,100 +371,6 @@ private LanguageServerConfiguration getLanguageServerConfiguration() {
401371 return configuration ;
402372 }
403373
404- @ Nullable
405- private static TypeOfText getTypeOfText (int tokenType ) {
406-
407- TypeOfText typeOfText = null ;
408-
409- switch (tokenType ) {
410- case BSLLexer .PROCEDURE_KEYWORD :
411- case BSLLexer .FUNCTION_KEYWORD :
412- case BSLLexer .ENDPROCEDURE_KEYWORD :
413- case BSLLexer .ENDFUNCTION_KEYWORD :
414- case BSLLexer .EXPORT_KEYWORD :
415- case BSLLexer .VAL_KEYWORD :
416- case BSLLexer .ENDIF_KEYWORD :
417- case BSLLexer .ENDDO_KEYWORD :
418- case BSLLexer .IF_KEYWORD :
419- case BSLLexer .ELSIF_KEYWORD :
420- case BSLLexer .ELSE_KEYWORD :
421- case BSLLexer .THEN_KEYWORD :
422- case BSLLexer .WHILE_KEYWORD :
423- case BSLLexer .DO_KEYWORD :
424- case BSLLexer .FOR_KEYWORD :
425- case BSLLexer .TO_KEYWORD :
426- case BSLLexer .EACH_KEYWORD :
427- case BSLLexer .IN_KEYWORD :
428- case BSLLexer .TRY_KEYWORD :
429- case BSLLexer .EXCEPT_KEYWORD :
430- case BSLLexer .ENDTRY_KEYWORD :
431- case BSLLexer .RETURN_KEYWORD :
432- case BSLLexer .CONTINUE_KEYWORD :
433- case BSLLexer .RAISE_KEYWORD :
434- case BSLLexer .VAR_KEYWORD :
435- case BSLLexer .NOT_KEYWORD :
436- case BSLLexer .OR_KEYWORD :
437- case BSLLexer .AND_KEYWORD :
438- case BSLLexer .NEW_KEYWORD :
439- case BSLLexer .GOTO_KEYWORD :
440- case BSLLexer .BREAK_KEYWORD :
441- case BSLLexer .EXECUTE_KEYWORD :
442- typeOfText = TypeOfText .KEYWORD ;
443- break ;
444- case BSLLexer .TRUE :
445- case BSLLexer .FALSE :
446- case BSLLexer .UNDEFINED :
447- case BSLLexer .NULL :
448- case BSLLexer .DATETIME :
449- case BSLLexer .DECIMAL :
450- case BSLLexer .FLOAT :
451- typeOfText = TypeOfText .CONSTANT ;
452- break ;
453- case BSLLexer .STRING :
454- case BSLLexer .STRINGSTART :
455- case BSLLexer .STRINGPART :
456- case BSLLexer .STRINGTAIL :
457- case BSLLexer .PREPROC_STRING :
458- typeOfText = TypeOfText .STRING ;
459- break ;
460- case BSLLexer .LINE_COMMENT :
461- typeOfText = TypeOfText .COMMENT ;
462- break ;
463- case BSLLexer .HASH :
464- case BSLLexer .PREPROC_USE_KEYWORD :
465- case BSLLexer .PREPROC_REGION :
466- case BSLLexer .PREPROC_END_REGION :
467- case BSLLexer .PREPROC_AND_KEYWORD :
468- case BSLLexer .PREPROC_OR_KEYWORD :
469- case BSLLexer .PREPROC_NOT_KEYWORD :
470- case BSLLexer .PREPROC_IF_KEYWORD :
471- case BSLLexer .PREPROC_THEN_KEYWORD :
472- case BSLLexer .PREPROC_ELSIF_KEYWORD :
473- case BSLLexer .PREPROC_ELSE_KEYWORD :
474- case BSLLexer .PREPROC_ENDIF_KEYWORD :
475- typeOfText = TypeOfText .PREPROCESS_DIRECTIVE ;
476- break ;
477- case BSLLexer .AMPERSAND :
478- case BSLLexer .ANNOTATION_AFTER_SYMBOL :
479- case BSLLexer .ANNOTATION_AROUND_SYMBOL :
480- case BSLLexer .ANNOTATION_ATCLIENT_SYMBOL :
481- case BSLLexer .ANNOTATION_ATCLIENTATSERVER_SYMBOL :
482- case BSLLexer .ANNOTATION_ATCLIENTATSERVERNOCONTEXT_SYMBOL :
483- case BSLLexer .ANNOTATION_ATSERVER_SYMBOL :
484- case BSLLexer .ANNOTATION_ATSERVERNOCONTEXT_SYMBOL :
485- case BSLLexer .ANNOTATION_BEFORE_SYMBOL :
486- case BSLLexer .ANNOTATION_CHANGEANDVALIDATE_SYMBOL :
487- case BSLLexer .ANNOTATION_CUSTOM_SYMBOL :
488- typeOfText = TypeOfText .ANNOTATION ;
489- break ;
490- default :
491- // no-op
492- }
493-
494- return typeOfText ;
495-
496- }
497-
498374 private static Object castDiagnosticParameterValue (String valueToCast , Class <?> type ) {
499375 Object value ;
500376 if (type == Integer .class ) {
0 commit comments