Skip to content

Commit 83b2f00

Browse files
authored
Merge pull request #107 from 1c-syntax/fix/highlighting
2 parents 2628d8e + e0da556 commit 83b2f00

File tree

5 files changed

+1140
-150
lines changed

5 files changed

+1140
-150
lines changed

src/main/java/com/github/_1c_syntax/bsl/sonar/BSLCoreSensor.java

Lines changed: 3 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import com.github._1c_syntax.bsl.languageserver.context.ServerContext;
3131
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo;
3232
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameterInfo;
33-
import com.github._1c_syntax.bsl.parser.BSLLexer;
3433
import com.github._1c_syntax.bsl.sonar.language.BSLLanguage;
3534
import com.github._1c_syntax.bsl.sonar.language.BSLLanguageServerRuleDefinition;
3635
import com.github._1c_syntax.utils.Absolute;
@@ -50,16 +49,13 @@
5049
import org.sonar.api.batch.sensor.SensorDescriptor;
5150
import org.sonar.api.batch.sensor.coverage.NewCoverage;
5251
import 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;
5552
import org.sonar.api.measures.CoreMetrics;
5653
import org.sonar.api.measures.FileLinesContext;
5754
import org.sonar.api.measures.FileLinesContextFactory;
5855
import org.sonar.api.rule.RuleKey;
5956
import org.sonar.api.utils.log.Logger;
6057
import org.sonar.api.utils.log.Loggers;
6158

62-
import javax.annotation.Nullable;
6359
import java.io.File;
6460
import java.io.IOException;
6561
import 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

Comments
 (0)