Skip to content

Commit

Permalink
Загрузка правил без использования Spring Boot и BSLLSBinding
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Jan 27, 2025
1 parent 6c36bea commit 232a5d2
Showing 1 changed file with 36 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,19 @@
*/
package com.github._1c_syntax.bsl.sonar.language;

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.diagnostics.BSLDiagnostic;
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticCode;
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticInfo;
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticMetadata;
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticParameterInfo;
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticSeverity;
import com.github._1c_syntax.bsl.languageserver.diagnostics.metadata.DiagnosticType;
import com.github._1c_syntax.bsl.sonar.BSLCommunityProperties;
import com.github._1c_syntax.utils.StringInterner;
import com.google.common.reflect.ClassPath;
import lombok.SneakyThrows;
import org.commonmark.ext.autolink.AutolinkExtension;
import org.commonmark.ext.gfm.tables.TablesExtension;
import org.commonmark.ext.heading.anchor.HeadingAnchorExtension;
Expand All @@ -40,14 +45,15 @@
import org.sonar.api.server.rule.RulesDefinition;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.springframework.core.annotation.AnnotationUtils;

import javax.annotation.CheckForNull;
import java.io.IOException;
import java.util.Arrays;
import java.util.EnumMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.stream.Collectors;

public class BSLLanguageServerRuleDefinition implements RulesDefinition {

Expand All @@ -67,9 +73,6 @@ public class BSLLanguageServerRuleDefinition implements RulesDefinition {
public BSLLanguageServerRuleDefinition(Configuration config) {
this.config = config;

var configuration = BSLLSBinding.getLanguageServerConfiguration();
configuration.setLanguage(createDiagnosticLanguage());

var extensions = Arrays.asList(
TablesExtension.create(),
AutolinkExtension.create(),
Expand All @@ -91,7 +94,10 @@ public void define(Context context) {
.createRepository(REPOSITORY_KEY, BSLLanguage.KEY)
.setName(REPOSITORY_NAME);

var diagnosticInfos = BSLLSBinding.getDiagnosticInfos();
var configuration = new LanguageServerConfiguration();
configuration.setLanguage(createDiagnosticLanguage());

var diagnosticInfos = getDiagnosticInfo(configuration);

diagnosticInfos.forEach((DiagnosticInfo currentDiagnosticInfo) -> {
diagnosticInfo = currentDiagnosticInfo;
Expand All @@ -101,17 +107,17 @@ public void define(Context context) {
});

repository.done();

BSLLSBinding.getApplicationContext().close();
}

public static List<String> getActivatedRuleKeys() {
return BSLLSBinding.getDiagnosticInfos()
.stream()
.filter(DiagnosticInfo::isActivatedByDefault)
.map(DiagnosticInfo::getCode)
.map((DiagnosticCode diagnosticCode) -> diagnosticCode.getStringValue())
.collect(Collectors.toList());
var configuration = new LanguageServerConfiguration();

return getDiagnosticInfo(configuration)
.stream()
.filter(DiagnosticInfo::isActivatedByDefault)
.map(DiagnosticInfo::getCode)
.map((DiagnosticCode diagnosticCode) -> diagnosticCode.getStringValue())
.toList();
}

private void setUpNewRule(NewRule newRule) {
Expand Down Expand Up @@ -229,4 +235,20 @@ private static Map<DiagnosticType, RuleType> createRuleTypeMap() {

return map;
}

@SneakyThrows
@SuppressWarnings("unchecked")
private static List<DiagnosticInfo> getDiagnosticInfo(LanguageServerConfiguration configuration) {
var stringInterner = new StringInterner();

return ClassPath.from(ClassLoader.getSystemClassLoader())
.getAllClasses()
.stream()
.filter(clazz -> clazz.getPackageName().equals("com.github._1c_syntax.bsl.languageserver.diagnostics"))
.map(ClassPath.ClassInfo::load)
.filter(aClass -> AnnotationUtils.getAnnotation(aClass, DiagnosticMetadata.class) != null)
.map(aClass -> (Class<? extends BSLDiagnostic>) aClass)
.map(aClass -> new DiagnosticInfo(aClass, configuration, stringInterner))
.toList();
}
}

0 comments on commit 232a5d2

Please sign in to comment.