Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Sep 23, 2020
2 parents 2b52baf + 83b2f00 commit e1c3737
Show file tree
Hide file tree
Showing 12 changed files with 1,181 additions and 184 deletions.
16 changes: 9 additions & 7 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ plugins {
`maven-publish`
id("org.sonarqube") version "3.0"
id("com.github.hierynomus.license") version "0.15.0"
id("com.github.johnrengelman.shadow") version("5.2.0")
id("com.github.ben-manes.versions") version "0.28.0"
id("com.github.johnrengelman.shadow") version("6.0.0")
id("com.github.ben-manes.versions") version "0.33.0"
id("com.github.gradle-git-version-calculator") version "1.1.0"
id("io.franzbecker.gradle-lombok") version "4.0.0"
}
Expand All @@ -24,13 +24,15 @@ repositories {
}

val commonmarkVersion = "0.14.0"
val junitVersion = "5.6.1"
val junitVersion = "5.7.0"

dependencies {
implementation("org.sonarsource.sonarqube:sonar-plugin-api:7.9")

implementation("com.github.1c-syntax:bsl-language-server:0.15.2")
implementation("com.github.1c-syntax", "utils", "0.3.0")
implementation("com.github.1c-syntax", "bsl-language-server", "0.16.2")

implementation("org.apache.commons:commons-lang3:3.10")
implementation("com.fasterxml.jackson.core:jackson-databind:2.10.3")

implementation("com.google.code.findbugs:jsr305:3.0.2")
// https://mvnrepository.com/artifact/org.sonarsource.analyzer-commons/sonar-analyzer-commons
Expand All @@ -48,8 +50,8 @@ dependencies {
testImplementation("org.junit.jupiter", "junit-jupiter-api", junitVersion)
testRuntimeOnly("org.junit.jupiter", "junit-jupiter-engine", junitVersion)

testImplementation("org.assertj:assertj-core:3.16.1")
testImplementation("org.mockito:mockito-core:3.3.3")
testImplementation("org.assertj:assertj-core:3.17.2")
testImplementation("org.mockito:mockito-core:3.5.10")
}

java {
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
2 changes: 2 additions & 0 deletions gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ esac

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar


# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
Expand Down Expand Up @@ -129,6 +130,7 @@ fi
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`

JAVACMD=`cygpath --unix "$JAVACMD"`

# We build the pattern for arguments to be converted via cygpath
Expand Down
1 change: 1 addition & 0 deletions gradlew.bat
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ set CMD_LINE_ARGS=%*

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar


@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%

Expand Down
155 changes: 16 additions & 139 deletions src/main/java/com/github/_1c_syntax/bsl/sonar/BSLCoreSensor.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,15 @@
*/
package com.github._1c_syntax.bsl.sonar;

import com.github._1c_syntax.bsl.languageserver.BSLLSBinding;
import com.github._1c_syntax.bsl.languageserver.configuration.Language;
import com.github._1c_syntax.bsl.languageserver.configuration.LanguageServerConfiguration;
import com.github._1c_syntax.bsl.languageserver.configuration.diagnostics.SkipSupport;
import com.github._1c_syntax.bsl.languageserver.context.DocumentContext;
import com.github._1c_syntax.bsl.languageserver.context.MetricStorage;
import com.github._1c_syntax.bsl.languageserver.context.ServerContext;
import com.github._1c_syntax.bsl.languageserver.diagnostics.BSLDiagnostic;
import com.github._1c_syntax.bsl.languageserver.diagnostics.DiagnosticSupplier;
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo;
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameterInfo;
import com.github._1c_syntax.bsl.languageserver.providers.DiagnosticProvider;
import com.github._1c_syntax.bsl.parser.BSLLexer;
import com.github._1c_syntax.bsl.sonar.language.BSLLanguage;
import com.github._1c_syntax.bsl.sonar.language.BSLLanguageServerRuleDefinition;
import com.github._1c_syntax.utils.Absolute;
Expand All @@ -52,22 +49,20 @@
import org.sonar.api.batch.sensor.SensorDescriptor;
import org.sonar.api.batch.sensor.coverage.NewCoverage;
import org.sonar.api.batch.sensor.cpd.NewCpdTokens;
import org.sonar.api.batch.sensor.highlighting.NewHighlighting;
import org.sonar.api.batch.sensor.highlighting.TypeOfText;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.FileLinesContext;
import org.sonar.api.measures.FileLinesContextFactory;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;

import javax.annotation.Nullable;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
Expand All @@ -84,9 +79,8 @@ public class BSLCoreSensor implements Sensor {

private final boolean langServerEnabled;
private final List<String> sourcesList;
private final LanguageServerConfiguration languageServerConfiguration;
private final DiagnosticProvider diagnosticProvider;
private final IssuesLoader issuesLoader;
private final BSLHighlighter highlighter;

private final boolean calculateCoverLoc;

Expand All @@ -107,10 +101,8 @@ public BSLCoreSensor(SensorContext context, FileLinesContextFactory fileLinesCon
.collect(Collectors.toList()))
.orElse(Collections.singletonList("."));

languageServerConfiguration = getLanguageServerConfiguration();
DiagnosticSupplier diagnosticSupplier = new DiagnosticSupplier(languageServerConfiguration);
diagnosticProvider = new DiagnosticProvider(diagnosticSupplier);
issuesLoader = new IssuesLoader(context);
highlighter = new BSLHighlighter(context);
}

@Override
Expand Down Expand Up @@ -152,6 +144,8 @@ public void execute(SensorContext context) {
.orElse(baseDir.toPath());
}));

LanguageServerConfiguration languageServerConfiguration = getLanguageServerConfiguration();

inputFilesByPath.forEach((Path sourceDir, List<InputFile> inputFilesList) -> {
LOGGER.info("Source dir: {}", sourceDir);

Expand All @@ -160,7 +154,8 @@ public void execute(SensorContext context) {
sourceDir
);

var bslServerContext = new ServerContext(configurationRoot);
var bslServerContext = BSLLSBinding.getServerContext();
bslServerContext.setConfigurationRoot(configurationRoot);
bslServerContext.populateContext();

try (ProgressBar pb = new ProgressBar("", inputFilesList.size(), ProgressBarStyle.ASCII)) {
Expand All @@ -176,6 +171,7 @@ public void execute(SensorContext context) {
bslServerContext.clear();
});

BSLLSBinding.getApplicationContext().close();
}


Expand All @@ -192,13 +188,12 @@ private void processFile(InputFile inputFile, ServerContext bslServerContext) {
DocumentContext documentContext = bslServerContext.addDocument(uri, content);

if (langServerEnabled) {
diagnosticProvider.computeDiagnostics(documentContext)
documentContext.getDiagnostics()
.forEach(diagnostic -> issuesLoader.createIssue(inputFile, diagnostic));
diagnosticProvider.clearComputedDiagnostics(documentContext);
}

saveCpd(inputFile, documentContext);
saveHighlighting(inputFile, documentContext);
highlighter.saveHighlighting(inputFile, documentContext);
saveMeasures(inputFile, documentContext);

saveCoverageLoc(inputFile, documentContext);
Expand Down Expand Up @@ -233,34 +228,6 @@ private void saveCpd(InputFile inputFile, DocumentContext documentContext) {

}

private void saveHighlighting(InputFile inputFile, DocumentContext documentContext) {

NewHighlighting highlighting = context.newHighlighting().onFile(inputFile);

documentContext.getTokens().forEach((Token token) -> {
TypeOfText typeOfText = getTypeOfText(token.getType());

if (typeOfText == null) {
return;
}

int line = token.getLine();
int charPositionInLine = token.getCharPositionInLine();
String tokenText = token.getText();

highlighting.highlight(
line,
charPositionInLine,
line,
charPositionInLine + tokenText.length(),
typeOfText
);
});

highlighting.save();

}

private void saveMeasures(InputFile inputFile, DocumentContext documentContext) {

MetricStorage metrics = documentContext.getMetrics();
Expand Down Expand Up @@ -329,6 +296,7 @@ private LanguageServerConfiguration getLanguageServerConfiguration() {
.map(Boolean::parseBoolean)
.orElse(BSLCommunityProperties.LANG_SERVER_OVERRIDE_CONFIGURATION_DEFAULT_VALUE);

var configuration = BSLLSBinding.getLanguageServerConfiguration();
if (overrideConfiguration) {
String configurationPath = context.config()
.get(BSLCommunityProperties.LANG_SERVER_CONFIGURATION_PATH_KEY)
Expand All @@ -337,13 +305,13 @@ private LanguageServerConfiguration getLanguageServerConfiguration() {
File configurationFile = new File(configurationPath);
if (configurationFile.exists()) {
LOGGER.info("BSL LS configuration file exists. Overriding SonarQube rules' settings...");
return LanguageServerConfiguration.create(configurationFile);
configuration.update(configurationFile);
return configuration;
} else {
LOGGER.error("Can't find bsl configuration file {}. Using SonarQube config instead.", configurationPath);
}
}

LanguageServerConfiguration configuration = LanguageServerConfiguration.create();
String diagnosticLanguageCode = context.config()
.get(BSLCommunityProperties.LANG_SERVER_DIAGNOSTIC_LANGUAGE_KEY)
.orElse(BSLCommunityProperties.LANG_SERVER_DIAGNOSTIC_LANGUAGE_DEFAULT_VALUE);
Expand All @@ -365,10 +333,9 @@ private LanguageServerConfiguration getLanguageServerConfiguration() {
ActiveRules activeRules = context.activeRules();

Map<String, Either<Boolean, Map<String, Object>>> diagnostics = new HashMap<>();
List<Class<? extends BSLDiagnostic>> diagnosticClasses = DiagnosticSupplier.getDiagnosticClasses();
Collection<DiagnosticInfo> diagnosticInfos = BSLLSBinding.getDiagnosticInfos();

for (Class<? extends BSLDiagnostic> diagnosticClass : diagnosticClasses) {
DiagnosticInfo diagnosticInfo = new DiagnosticInfo(diagnosticClass);
for (DiagnosticInfo diagnosticInfo : diagnosticInfos) {
String diagnosticCode = diagnosticInfo.getCode().getStringValue();
ActiveRule activeRule = activeRules.find(
RuleKey.of(
Expand Down Expand Up @@ -404,96 +371,6 @@ private LanguageServerConfiguration getLanguageServerConfiguration() {
return configuration;
}

@Nullable
private static TypeOfText getTypeOfText(int tokenType) {

TypeOfText typeOfText = null;

switch (tokenType) {
case BSLLexer.PROCEDURE_KEYWORD:
case BSLLexer.FUNCTION_KEYWORD:
case BSLLexer.ENDPROCEDURE_KEYWORD:
case BSLLexer.ENDFUNCTION_KEYWORD:
case BSLLexer.EXPORT_KEYWORD:
case BSLLexer.VAL_KEYWORD:
case BSLLexer.ENDIF_KEYWORD:
case BSLLexer.ENDDO_KEYWORD:
case BSLLexer.IF_KEYWORD:
case BSLLexer.ELSIF_KEYWORD:
case BSLLexer.ELSE_KEYWORD:
case BSLLexer.THEN_KEYWORD:
case BSLLexer.WHILE_KEYWORD:
case BSLLexer.DO_KEYWORD:
case BSLLexer.FOR_KEYWORD:
case BSLLexer.TO_KEYWORD:
case BSLLexer.EACH_KEYWORD:
case BSLLexer.IN_KEYWORD:
case BSLLexer.TRY_KEYWORD:
case BSLLexer.EXCEPT_KEYWORD:
case BSLLexer.ENDTRY_KEYWORD:
case BSLLexer.RETURN_KEYWORD:
case BSLLexer.CONTINUE_KEYWORD:
case BSLLexer.RAISE_KEYWORD:
case BSLLexer.VAR_KEYWORD:
case BSLLexer.NOT_KEYWORD:
case BSLLexer.OR_KEYWORD:
case BSLLexer.AND_KEYWORD:
case BSLLexer.NEW_KEYWORD:
case BSLLexer.GOTO_KEYWORD:
case BSLLexer.BREAK_KEYWORD:
case BSLLexer.EXECUTE_KEYWORD:
typeOfText = TypeOfText.KEYWORD;
break;
case BSLLexer.TRUE:
case BSLLexer.FALSE:
case BSLLexer.UNDEFINED:
case BSLLexer.NULL:
case BSLLexer.DATETIME:
case BSLLexer.DECIMAL:
case BSLLexer.FLOAT:
typeOfText = TypeOfText.CONSTANT;
break;
case BSLLexer.STRING:
case BSLLexer.STRINGSTART:
case BSLLexer.STRINGPART:
case BSLLexer.STRINGTAIL:
case BSLLexer.PREPROC_STRING:
typeOfText = TypeOfText.STRING;
break;
case BSLLexer.LINE_COMMENT:
typeOfText = TypeOfText.COMMENT;
break;
case BSLLexer.HASH:
case BSLLexer.PREPROC_USE_KEYWORD:
case BSLLexer.PREPROC_REGION:
case BSLLexer.PREPROC_END_REGION:
case BSLLexer.PREPROC_AND_KEYWORD:
case BSLLexer.PREPROC_OR_KEYWORD:
case BSLLexer.PREPROC_NOT_KEYWORD:
case BSLLexer.PREPROC_IF_KEYWORD:
case BSLLexer.PREPROC_THEN_KEYWORD:
case BSLLexer.PREPROC_ELSIF_KEYWORD:
case BSLLexer.PREPROC_ELSE_KEYWORD:
case BSLLexer.PREPROC_ENDIF_KEYWORD:
typeOfText = TypeOfText.PREPROCESS_DIRECTIVE;
break;
case BSLLexer.AMPERSAND:
case BSLLexer.ANNOTATION_ATCLIENT_SYMBOL:
case BSLLexer.ANNOTATION_ATCLIENTATSERVER_SYMBOL:
case BSLLexer.ANNOTATION_ATCLIENTATSERVERNOCONTEXT_SYMBOL:
case BSLLexer.ANNOTATION_ATSERVER_SYMBOL:
case BSLLexer.ANNOTATION_ATSERVERNOCONTEXT_SYMBOL:
case BSLLexer.ANNOTATION_CUSTOM_SYMBOL:
typeOfText = TypeOfText.ANNOTATION;
break;
default:
// no-op
}

return typeOfText;

}

private static Object castDiagnosticParameterValue(String valueToCast, Class<?> type) {
Object value;
if (type == Integer.class) {
Expand Down
Loading

0 comments on commit e1c3737

Please sign in to comment.