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