Skip to content

Commit 331cc2e

Browse files
committed
feat: поддержка параметров-списков (Either<String, List<String>>)
Диагностики BSL Language Server получили тип параметра `Either<String, List<String>>` для списков (строка через запятую либо массив). SonarQube UI не поддерживает параметры правил в виде массива, поэтому такой параметр объявляется как `RuleParamType.STRING`, а значение из UI прокидывается строкой — в `Either` оно оборачивается уже на стороне BSL Language Server. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W86iNs3Sj9wTS6NFFHvVbv
1 parent a090f18 commit 331cc2e

2 files changed

Lines changed: 7 additions & 2 deletions

File tree

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,9 @@ private static Object castDiagnosticParameterValue(String valueToCast, Class<?>
385385
value = Boolean.parseBoolean(valueToCast);
386386
} else if (type == Float.class) {
387387
value = Float.parseFloat(valueToCast);
388-
} else if (type == String.class) {
388+
} else if (type == String.class || type == Either.class) {
389+
// Either<String, List<String>> — параметр-список. Из SonarQube значение приходит строкой
390+
// (через запятую); в Either<String, ...> оно оборачивается уже на стороне BSL Language Server.
389391
value = valueToCast;
390392
} else {
391393
throw new IllegalArgumentException("Unsupported diagnostic parameter type " + type);

src/main/java/com/github/_1c_syntax/bsl/sonar/language/BSLLanguageServerRuleDefinition.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.commonmark.ext.heading.anchor.HeadingAnchorExtension;
4141
import org.commonmark.parser.Parser;
4242
import org.commonmark.renderer.html.HtmlRenderer;
43+
import org.eclipse.lsp4j.jsonrpc.messages.Either;
4344
import org.sonar.api.config.Configuration;
4445
import org.sonar.api.rules.RuleType;
4546
import org.sonar.api.server.rule.RuleParamType;
@@ -193,7 +194,9 @@ private static RuleParamType getRuleParamType(Class<?> type) {
193194

194195
if (type == Integer.class) {
195196
ruleParamType = RuleParamType.INTEGER;
196-
} else if (type == String.class) {
197+
} else if (type == String.class || type == Either.class) {
198+
// Either<String, List<String>> — параметр-список. В SonarQube UI не поддерживаются
199+
// параметры правил в виде массива, поэтому остаётся строкой (значения через запятую).
197200
ruleParamType = RuleParamType.STRING;
198201
} else if (type == Boolean.class) {
199202
ruleParamType = RuleParamType.BOOLEAN;

0 commit comments

Comments
 (0)