diff --git a/CHANGELOG.md b/CHANGELOG.md
index fde2231d..08e0b806 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,10 @@
# Changelog
+## 9.1.1 (upcoming)
+
+- Fix false positives for words added by `Add to dictionary` for Slovak rule IDs `MUZSKY_ROD_NEZIV_A`, `ZENSKY_ROD_A`, and `STREDNY_ROD_A` (fixes [vscode-ltex#221](https://github.com/valentjn/vscode-ltex/issues/221))
+
## 9.1.0 (January 24, 2021)
- Add support for BibTEX files (language code `bibtex`, fixes [vscode-ltex#211](https://github.com/valentjn/vscode-ltex/issues/211))
diff --git a/ltexls-core/src/main/java/org/bsplines/ltexls/languagetool/LanguageToolJavaInterface.java b/ltexls-core/src/main/java/org/bsplines/ltexls/languagetool/LanguageToolJavaInterface.java
index fcf5d2ff..511ac33e 100644
--- a/ltexls-core/src/main/java/org/bsplines/ltexls/languagetool/LanguageToolJavaInterface.java
+++ b/ltexls-core/src/main/java/org/bsplines/ltexls/languagetool/LanguageToolJavaInterface.java
@@ -39,6 +39,7 @@
import org.xml.sax.SAXException;
public class LanguageToolJavaInterface extends LanguageToolInterface {
+ private Set dictionary;
private @MonotonicNonNull ResultCache resultCache;
private @MonotonicNonNull JLanguageTool languageTool;
@@ -54,6 +55,8 @@ public class LanguageToolJavaInterface extends LanguageToolInterface {
*/
public LanguageToolJavaInterface(String languageShortCode, String motherTongueShortCode,
int sentenceCacheSize, Set dictionary) {
+ this.dictionary = dictionary;
+
if (!Languages.isLanguageSupported(languageShortCode)) {
Tools.logger.severe(Tools.i18n("notARecognizedLanguage", languageShortCode));
return;
@@ -157,10 +160,20 @@ public void write(int b) {
return Collections.emptyList();
}
+ String code = annotatedTextFragment.getCodeFragment().getCode();
List result = new ArrayList<>();
for (RuleMatch match : matches) {
- result.add(new LanguageToolRuleMatch(match, annotatedTextFragment));
+ LanguageToolRuleMatch languageToolRuleMatch =
+ new LanguageToolRuleMatch(match, annotatedTextFragment);
+
+ if (languageToolRuleMatch.isUnknownWordRule()
+ && this.dictionary.contains(code.substring(languageToolRuleMatch.getFromPos(),
+ languageToolRuleMatch.getToPos()))) {
+ continue;
+ }
+
+ result.add(languageToolRuleMatch);
}
return result;
diff --git a/ltexls-core/src/test/java/org/bsplines/ltexls/server/DocumentCheckerTest.java b/ltexls-core/src/test/java/org/bsplines/ltexls/server/DocumentCheckerTest.java
index 9d6b1d11..4fb4cb19 100644
--- a/ltexls-core/src/test/java/org/bsplines/ltexls/server/DocumentCheckerTest.java
+++ b/ltexls-core/src/test/java/org/bsplines/ltexls/server/DocumentCheckerTest.java
@@ -235,6 +235,15 @@ public void testDictionary() {
Pair, List> checkingResult =
checkDocument(document, settings);
Assertions.assertEquals(1, checkingResult.getKey().size());
+
+ document = createDocument("latex", "S pekn\u00e9 inteligentn\u00fdmi dubmi.\n");
+ settings = settings.withLanguageShortCode("sk-SK");
+ checkingResult = checkDocument(document, settings);
+ Assertions.assertEquals(1, checkingResult.getKey().size());
+
+ settings = settings.withDictionary(Collections.singleton("pekn\u00e9"));
+ checkingResult = checkDocument(document, settings);
+ Assertions.assertEquals(0, checkingResult.getKey().size());
}
@Test