๐ง Change: Disable LanguageToolโs internal per-sentence result cache by default: the ltex.sentenceCacheSize default changes from 2000 to 0. The new per-paragraph fragment cache supersedes it for the edit loop and, unlike the in-process cache, also covers the remote HTTP backend โ so keeping the sentence cache around only added CPU/memory overhead and another point of failure. A value of 0 is the natural floor of the capacity setting (2000 โ โฆ โ 1 sentence โ 0 = nothing cached), not a separate on/off flag; internally any non-positive value maps to a nullResultCache, so LanguageTool takes its genuine no-cache code path rather than allocating a zero-capacity cache that would still run its eviction machinery on every lookup. Set ltex.sentenceCacheSize to a positive value to re-enable it. โ Andrea Alberti (@alberti42)
โจ New: Incremental checking: re-check only the paragraph you edited instead of the whole document on every change. Each document is sliced into paragraph-sized fragments after parsing, and each fragmentโs LanguageTool result is cached (keyed by its text and the relevant settings); on the next check, unchanged paragraphs are served from the cache and their diagnostics reprojected to their new positions, while contiguous changed paragraphs are batched into a single LanguageTool request. This also benefits the remote HTTP backend, where only changed paragraphs are re-sent โ making large documents practical on the free public APIโs per-request and per-minute limits. New optional settings tune it: ltex.paragraphCacheEnabled (default true; set false to disable the cache and check whole regions as before), ltex.maxRequestSize (default 20000, the largest text sent per request), and ltex.paragraphCacheTtlMinutes (default 30, how long idle cached results are kept). โ Andrea Alberti (@alberti42)
โจ New: Recognize the Emacs / Emacs-Lisp ``nameโ quoted-identifier convention (backtick opener, straight-apostrophe closer, inherited from Texinfo) in ;;-style comments so LanguageTool stops flagging the trailing โ as an unpaired quote and stops spell-checking the wrapped symbol name. The substitution rewrites the closing โ to a matched backtick before flexmark parses the comment, so the region is recognized as inline code and surfaced to LanguageTool as a Dummy token. Length-preserving (one char for one char), so source-position arithmetic and the shadow-markup mapping that maps diagnostics back to the original file are unchanged; the markup string sent to LanguageTool retains the original apostrophe, so quickfixes and code actions on real LanguageTool matches elsewhere in the same comment still resolve to the user's literal source. Enabled only for codeLanguageId in {elisp, emacs-lisp} where the convention is canonical — Common Lisp has no standardised convention and Clojure uses Markdown-style matched backticks, so both keep the previous behaviour. Plain Markdown documents are also unaffected because the gate is opt-in from ProgramAnnotatedTextBuilder`. โ Andrea Alberti (@alberti42)
๐ Bug fix: Fix Premium diagnostics whose squiggly range extends past the offending word into surrounding code (visible in editors as a 14-line highlight on a one-word misspelling, and a quickfix that replaces all that intervening content). LanguageTool Premiumโs QB_NEW_*_ORTHOGRAPHY and AI_* rule families sometimes extend an orthography match span past the misspelled word โ through any intervening markup โ up to the start of the next TEXT segment in the annotated text, in an attempt to enforce sentence termination. Because each TEXT segment maps to a contiguous run of source prose separated by code/markup, the resulting LT-reported offset+length could cover hundreds of source characters spanning multiple comment blocks. Clamp toPos to the end of the TEXT segment containing fromPos in LanguageToolRuleMatch.fromLanguageTool, gated on the same isPremiumPunctuationAdjacentSpanRule(ruleId) predicate that governs dictionary-entry normalization, so non-Premium traffic (local Java backend, free HTTP tier) is bit-for-bit unchanged. โ Andrea Alberti (@alberti42)
๐ Bug fix: Fix silent server hang when checking source files whose line-comment blocks end with a bare comment marker (e.g. an Emacs Lisp block ending with a ;; line that has no content, or any C/Java/Kotlin/etc. block ending with a bare //). Such blocks produced an empty trailing code segment in MarkdownAnnotatedTextBuilder.addComment; the subsequent addMarkup(code.length) call consumed the trailing shadow markup but then bumped newPos past code.length, producing a StringIndexOutOfBoundsException on code.substring(pos, newPos). The exception was raised on the executor thread inside LtexTextDocumentService.didOpen, whose try only catches ExecutionException and InterruptedException, so it was silently dropped and publishDiagnostics was never sent โ leaving the LSP server idle and the client waiting indefinitely. addMarkup(Int) now clamps newPos to code.length after consuming a shadow markup, restoring the invariant that the position never exceeds the buffer length. โ Andrea Alberti (@alberti42)
๐ Bug fix: Fix StringIndexOutOfBoundsException crash when checking comments inside source files with CRLF line endings or certain multi-line content. Two independent off-by-one bugs in MarkdownAnnotatedTextBuilder โ a stray trailing \n in addCommentโs reconstructed clearCode, and removeComment only detecting \n boundaries while ignoring \r โ combined to push a substring index two characters past the end of the source comment, aborting the whole documentโs check. Applies to every programming language routed through ProgramAnnotatedTextBuilder (C, Java, Kotlin, Rust, Go, JS/TS, Lisp/Clojure, Lua, Haskell, โฆ); Python comments go through a different path and were not affected. Plain Markdown, LATEX, BibTEX, etc. were never affected. โ Andrea Alberti (@alberti42)
โจ New: Accept elisp and emacs-lisp as codeLanguageIds alongside the existing lisp. Editors and LSP clients that natively label .el buffers with one of these names (modern lsp-mode, Neovimโs built-in LSP, some VS Code Elisp extensions) now work out of the box without users having to remap to lisp. Behavior is identical to lisp โ same ; / ;; line-comment regex, no block comments โ so this is purely an ergonomic alias. The standalone CLI (lsp-cli-plus) also maps the .el file extension to elisp when checking files by path. โ Andrea Alberti (@alberti42)
๐ Bug fix: Fix silent spell-check disable when ltex.language = "auto" is used with an HTTP LanguageTool backend (including the free and premium public servers). Previously, LTEX resolved "auto" locally using LanguageToolโs lightweight SimpleLanguageIdentifier, which returns only bare codes like en, de, pt. For three LT-registered bases (en, de, pt) the bare Language subclass is a grammar-only umbrella with no spell dictionary, so spell-check was silently skipped for English/German/Portuguese text โ other LT bases like es, fr, it are full checkers in their bare form and were not affected. Now "auto" is forwarded to the HTTP server together with a new ltex.preferredVariants setting (default ["en-US", "de-DE", "pt-BR"], specifically covering those three bare-insufficient bases), so the serverโs own ngram/fasttext detector picks a concrete variant and spell-check runs. Other LT bases are deliberately omitted from the defaults because adding their variants would silently enable regional grammar rules (e.g. Argentinian voseo for es-AR) for everyone writing that language. The responseโs language.code is recorded on the code fragment so per-language code actions (add-to-dictionary, disable-rule, hide-false-positive) key correctly. For the local Java backend, bare detected codes are promoted to the first matching ltex.preferredVariants entry before the LanguageTool interface is built. Word completion (CompletionListProvider) applies the same promotion so the bundled completionList.<variant>.txt resource is found. If the HTTP response code is itself still bare โ which can happen on a self-hosted languagetool-server deployed without the ngram language-data download, since the server then falls back to a weaker detector โ the same ltex.preferredVariants promotion is applied to the response before it is recorded on the code fragment, so spell-check activates against self-hosted instances as well, mirroring the local Java backendโs behavior. โ Andrea Alberti (@alberti42)
๐ Bug fix: Fix per-language ltex.dictionary, ltex.disabledRules, and ltex.hiddenFalsePositives entries being silently ignored when ltex.language = "auto" is used with an HTTP LanguageTool backend. On the HTTP path, settings.languageShortCode stays at the literal "auto" for the whole session (only the per-fragment code gets back-filled from the server response), but match-filtering looked up the per-language maps with settings.languageShortCode as the key โ so the lookup always hit the empty "auto" bucket and entries stored under the concrete variant (e.g. ltex.dictionary["en-US"]) were never applied. Clicking โAdd to dictionaryโ persisted correctly but every subsequent recheck re-flagged the word. Lookups now key on the fragmentโs resolved language code, so per-language settings take effect on the first check. The Java backend was unaffected because it rewrites settings.languageShortCode to the resolved variant before the check. โ Andrea Alberti (@alberti42)
๐ Bug fix: Normalize ltex.language input so regional variants (e.g. fr-FR, it-IT, es-ES) are mapped to the registered LanguageTool tag rather than silently disabling checking. Also accepts case variants of the "auto" sentinel ("Auto", "AUTO") and trims leading/trailing whitespace. โ Andrea Alberti (@alberti42)
๐ Bug fix: Offer the โAdd to dictionaryโ code action for spell-check matches produced by LanguageToolโs QB_NEW_*_ORTHOGRAPHY_*, AI_*_GGEC_REPLACEMENT_ORTHOGRAPHY_*, and ES_SIMPLE_REPLACE_* rule families (Premium/HTTP tier plus Spanish common-typo rules). โ Andrea Alberti (@alberti42)
๐ Bug fix: Trim surrounding punctuation from โAdd to dictionaryโ entries and from the check-path lookup key for matches from rule families known to emit punctuation-adjacent spans (LanguageTool Premiumโs QB_NEW_* / AI_*), so a span like amazng! (length 7) is persisted as the bare word amazng and every later occurrence โ amazng,, "amazng", (amazng) โ suppresses against the same single entry. Free LT, the bundled Java backend, and the Spanish _SIMPLE_REPLACE_ / Slovak gender-suffix rules always emit bare single-word spans and bypass the normalization entirely; no behavior change for those users. โ Andrea Alberti (@alberti42)
๐ Bug fix: Markdown: accept spaces and backslashes inside angle-bracketed link destinations (e.g. [text](<path with spaces.pdf>) or Windows-style [text](<C:\Users\My Documents\file.pdf>)), so the link is recognized and surrounding punctuation does not leak into spell-checked text. โ Andrea Alberti (@alberti42)
๐ Bug fix: Set CompletionItemKind.Text on dictionary completion items. Previously items carried only a label, leaving kind null; clients that map kinds to icons (VS Code, lsp-mode + Corfu, others) fell through to a generic placeholder icon, making LTEX+ word completions look distinct from every other text-based completion source. โ Andrea Alberti (@alberti42)
๐ Bug fix: Allow textDocument/completion at the very last position of a document. The fragment lookup and prefix scan both used a strict < against code.length, so a cursor sitting one past the last character (an unterminated document with no trailing whitespace) produced an empty list. Loosened both checks to treat the position immediately after the last character as a valid completion site. โ Andrea Alberti (@alberti42)
๐ Bug fix: Make the markup parser linear instead of quadratic in document length. The shared character-driven loop in CharacterBasedCodeAnnotatedTextBuilder tries on the order of 20โ25 anchored regexes per character; the previous implementation called regex.find(this.code.substring(pos)) on every attempt, allocating a fresh String of (code.length − pos) bytes solely to give the leading ^ a position-0 to anchor against. On large documents this byte-copying cost dominated parse time. Replaced the substring with Matcher.region(pos, code.length).lookingAt(), which anchors at pos directly via the JDKโs region API, and wrapped the result in a small adapter that preserves the existing MatchResult semantics so no caller had to change. Measured on a 135 KB org file with all fragments enabled: warm latency drops from ~3.1 s to ~0.23 s (~14ร faster). Every fragmentized language (LATEX, Markdown, HTML, AsciiDoc, reStructuredText, Typst, org, โฆ) shares the base class and benefits. โ Andrea Alberti (@alberti42)
๐ Bug fix: Donโt parse regions of the document the user has disabled with a magic comment (e.g. # ltex: enabled=false in org, % ltex: enabled=false in LATEX, etc.). Previously the language-specific parser ran over every fragment, including disabled ones, and the result was discarded just before the LanguageTool check. On documents where most of the body sits behind such a directive this dominated request latency: a 135 KB org file with ~130 KB hidden behind enabled=false took ~3 s warm and now takes ~25โ55 ms โ about the same as if the disabled tail werenโt there at all. The optimization lives in the shared check pipeline and benefits every fragmentized language (LATEX, Markdown, HTML, AsciiDoc, reStructuredText, Typst, org, gitcommit, BibTEX, โฆ). โ Andrea Alberti (@alberti42)
๐ Bug fix: Org: donโt flag the wrapped half of a list item for โfirst letter not uppercaseโ. Previously every list-item line emitted a paragraph break at end-of-line, so a continuation line indented to the bullet body (e.g. + A long sentence that wraps\n onto the next line.) was sent to LanguageTool as a fresh paragraph and its lowercase first word was flagged. The parser now tracks the bullet body column and, when the next line is a true wrap (indented past the bullet and not itself a new bullet), suppresses the paragraph break so the wrap stays in the same paragraph. โ Andrea Alberti (@alberti42)
๐ Bug fix: Org: spell-check the term in description lists. The prefix of a description-list item (e.g. - Apple :: a red fruit) used to be consumed as one chunk of markup, which silently dropped the term (โAppleโ) on the floor โ typos in it went unnoticed. The parser now splits the prefix into bullet, term (text), and ` :: separator, so the term reaches LanguageTool and is spell- and grammar-checked like any other word. A single \n` separator keeps the term in the same LanguageTool paragraph as the description, so the descriptionโs lowercase first word (โa red fruitโ) is not flagged. โ Andrea Alberti (@alberti42)
๐ง Change: Update bundled Java runtime from 21.0.4+7 to 21.0.5+11. No separate beta Java runtime build is required anymore for Windows aarch64.
โจ New: Add support for Neorg (LSP language ID neorg) โ ltex-ls-plus#55
โจ New: Add support for \NewDoumentCommand, \NewDocumentEnvironment, \NewExpandableDocumentCommand, \NewCommandCopy, \NewEnvironmentCopy, \IfNoValueTF, \IfValueTF, \IfBlankTF, \IfBooleanTF and many more (LATEX) โ ltex-ls-plus#69
โจ New: Add support for AsciiDoc (LSP language IDs asciidoc) โ vscode-ltex-plus#128
๐ Bug fix: Fix false positives in Typst โ ltex-ls-plus#72
๐ Bug fix: Ignore code blocks and raw text in Typst โ ltex-ls-plus#74
๐ง Change: Update from Java 11 to 21. Be aware: Starting from LTEX+ LS 18.0.0, Java 21 or higher is required!
โจ New: Add arm64/aarch64 Java runtimes for Linux (e.g. Raspberry Pi), macOS (Apple M1 SoC and its successors) and Windows on ARM.
17.0.1 (August 29, 2024)
๐ Bug fix: Silence output to stdout caused by LanguageTool. This issue caused a crash of LTEX+ LS on Linux systems. Itโs a similar issue to https://github.com/valentjn/vscode-ltex/issues/68
17.0.0 (August 24, 2024)
๐ง Change: Rename to LTEX+ LS
๐ง Change: Update bundled Java runtime to 11.0.24+8
16.0.0 (March 19, 2023)
๐ง Change: Update LanguageTool to 6.0 (see LT release notes of 5.6, 5.7, 5.8, 5.9, and 6.0)
โจ New: Add support for Git commit messages (LSP language IDs git-commit and gitcommit) โ valentjn/ltex-ls#132
๐ง Change: Refactor CLI into ltex-cli; --input-documents and --setings-file are deprecated and will be removed in a future release
โจ New: Add support for automatic language detection via language short code auto; language variants like en-US are not detected, only generic languages like en; this will result in spelling errors not being reported โ valentjn/ltex-ls#103
โจ New: Provide ID of LanguageTool rule via diagnostics code, not as part of diagnostics message
โจ New: Link diagnostics to LanguageTool website with more information
โจ New: Add support for the main option of the babel package (LATEX) โ valentjn/vscode-ltex#391
โจ New: Add setting ltex.ltex-ls.languageToolOrgUsername to set username on languagetool.org for Premium API access โ valentjn/vscode-ltex#398
โจ New: Add setting ltex.ltex-ls.languageToolOrgApiKey to set API key on languagetool.org for Premium API access โ valentjn/vscode-ltex#398
โจ New: Add support for ltex.dictionary when using a LanguageTool HTTP server
๐ง Change: Handle disabled rules ourselves to prevent reinitialization of LanguageTool when running the Disable rule quick fix โ valentjn/vscode-ltex#390
๐ Bug fix: Fix LanguageTool reinitialized when running the Add '...' to dictionary quick fix โ valentjn/vscode-ltex#390
๐ Bug fix: Fix wrong parsing of inline math formulas in Markdown when using dollar signs as delimiters and containing only one character (e.g., $a$)
๐ Bug fix: Fix used i18n keys removed
๐ Bug fix: Fix fallback from German to English i18n
๐ง Change: For binary archives, migrate from AdoptOpenJDK JREs to own Java runtime generated from Eclipse Adoptium JDKs
โจ New: Add support for more LATEX commands (\mathop, \overline, \tilde, \alpha, etc.) for automatic vowel detection in formulas in LATEX โ valentjn/ltex-ls#92, Shuhao Cao (@scaomath)
๐ง Change: Ignore non-object values for InitializeParams.initializationOptions โ valentjn/ltex-ls#65
10.0.0 (February 12, 2021)
๐ Removal: Remove support for settings that are deprecated since 8.0.0: ltex.ignoreInRuleSentence, ltex.commands.ignore, ltex.commands.dummy, ltex.environments.ignore, ltex.markdown.ignore, and ltex.markdown.dummy
๐ง Change: Replace ltex/serverStatus request with ltex.getServerStatus command
โจ New: Add support for magic comments inside HTML comments in Markdown (<!-- ltex: SETTINGS -->)
โจ New: Check documents even if their code language is not supported
๐ Bug fix: Fix comment sign before babel commands not recognized โ valentjn/vscode-ltex#245
๐ Bug fix: Fix removing items in settings with a hyphen prefix sometimes not working
๐ Bug fix: Fix space not added between two arguments of LATEX commands
๐ Bug fix: Fix manually checking BibTEX documents not working
๐ Bug fix: Fix words in dictionary containing markup not recognized
9.2.0 (January 29, 2021)
โจ New: Add support for Pandoc-style inline math ($...$) and display math ($$...$$ with $$ being at the beginning/end of a Markdown block) to Markdown parser โ valentjn/vscode-ltex#210
๐ Bug fix: 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 โ valentjn/vscode-ltex#221
๐ Bug fix: Fix BibTEX field seealso not ignored, ignore category and parent โ valentjn/vscode-ltex#211
๐ง Change: Move rule ID to the end of diagnostic messages as VS Code truncates the messages if the Problems panel is narrow โ valentjn/vscode-ltex#233
๐ Bug fix: Fix regression that messages of possible spelling mistakes are not prepended with the respective unknown words โ valentjn/vscode-ltex#161
๐ Bug fix: Fix crash when using \begin or \end without an argument โ valentjn/vscode-ltex#236
๐ง Change: Change $/progress tokens to include a UUID instead of a counter
โจ New: Add customCapabilities in InitializeParams.initializationOptions
๐ Removal: Remove unneeded command arguments type and command
๐ง Change: Replace \dots with Unicode ellipsis … instead of three dots ... to fix some false positives
โจ New: Add documentation
8.1.1 (November 24, 2020)
๐ง Change: Migrate from Travis CI to GitHub Actions
8.1.0 (November 15, 2020)
๐ง Change: Prepend messages of possible spelling mistakes with the respective unknown words โ valentjn/vscode-ltex#161
โจ New: Add support for optional arguments of \newtheorem
๐ Bug fix: Fix wrong position of diagnostics when using a recognized LATEX command with a non-recognized set of arguments due to an infinite loop โ valentjn/vscode-ltex#167
โจ New: Add workaround to eliminate the need for workspace-specific setting names; ltex.dictionary, ltex.disabledRules, and ltex.enabledRules can now be used in multiple setting scopes (user settings, workspace settings, and workspace folder settings) at the same time without overriding each other; instead, the settings of the different scopes will be properly merged (see documentation)
โจ New: Add support for \usepackage[LANGUAGE]{babel} if in the same file as the text to be checked โ valentjn/vscode-ltex#140
โจ New: Add support for more BibLATEX commands such as \autocite, \citeauthor, etc. โ valentjn/vscode-ltex#143
โจ New: Add support for overriding hard-coded command signatures โ valentjn/ltex-ls#27
๐ง Change: Move handling of external setting files from ltex-ls to vscode-ltex
๐ง Change: Increase duration before sentences expire in the result cache to 60 minutes
๐ Bug fix: Fix many settings changes cleared sentence cache, which led to performance issues, e.g., changing the ltex.enabled setting via magic comments โ valentjn/vscode-ltex#134
๐ Removal: Remove dependency on org.apache.httpcomponents:httpclient by using the HTTP client that comes with Java 11 when connecting to an HTTP LanguageTool server
7.3.1 (October 12, 2020)
๐ Bug fix: Fix delayed publication of diagnostics by adding workaround to guess the caret position
๐ Bug fix: Fix recheck being triggered when generating list of quick fixes; this should improve speed
7.3.0 (October 10, 2020)
โจ New: Add support for \ell as well as \mathcal, \mathfrak, etc. to vowel detection โ valentjn/vscode-ltex#131
โจ New: Add setting ltex.ltex-ls.logLevel to control the verbosity of the server log
๐ Bug fix: Fix diagnostics sometimes not lined up with the text with switching back from incremental to full document updates; unfortunately, this disables the delayed publication of diagnostics at the caret position
๐ง Change: Restructure and simplify internal quick fix and command structure, removing the need for pseudo-telemetry notifications
๐ Bug fix: Fix performance issue with multiple languages in one document via magic comments due to LanguageTool being reinitialized on each keystroke โ valentjn/vscode-ltex#124
7.1.1 (September 20, 2020)
๐ Bug fix: Fix NullPointerException when supplying relative paths to external dictionary files
โจ New: Add settings ltex.workspaceDictionary, ltex.workspaceDisabledRules, and ltex.workspaceEnabledRules with window scope to amend the corresponding user-specific settings; these are workspace-specific settings that should be configured in workspace settings
โจ New: Add settings ltex.workspaceFolderDictionary, ltex.workspaceFolderDisabledRules, and ltex.workspaceFolderEnabledRules with resource scope to amend the corresponding user-specific and workspace-specific settings; these are workspace-folder-specific settings that should be configured in workspace folder settings
๐ง Change: Delay diagnostics at the current caret position (e.g., incomplete word or sentence) until the user has finished typing โ valentjn/vscode-ltex#46
๐ Bug fix: Fix wrong language-dependent settings used for magic comments
๐ Bug fix: Fix add to dictionary and disable rule quick fixes using wrong language when used with magic comments
๐ Bug fix: Improve code quality by fixing hundreds of Checkstyle, SpotBugs, and Checker Framework warnings
๐ง Change: Migrate from Gradle to Maven
๐ง Change: Update Maven dependencies
5.0.0 (June 1, 2020)
โจ New: Include all languages in LTEX LS; this removes the need for language support extensions โ valentjn/vscode-ltex#6
๐ง Change: Adhere to semantic versioning. This means that the version of LTEX LS is not tied to the version of LanguageTool anymore, as the version of LanguageTool is not a semantic version. LTEX LS 5.0.0 uses LanguageTool 4.9.
๐ง Change: Rename ltex.<LANGUAGE>.dictionary โ ltex.dictionary (object with <LANGUAGE> keys)
๐ง Change: Rename ltex.<LANGUAGE>.disabledRules โ ltex.disabledRules (object with <LANGUAGE> keys)
๐ง Change: Rename ltex.<LANGUAGE>.enabledRules โ ltex.enabledRules (object with <LANGUAGE> keys)
โจ New: Add support for more BibLATEX citation commands, add support for plural dummies, add support for \eg, \egc, \ie, \iec โ valentjn/vscode-ltex#43
โจ New: Add visual feedback in status bar during startup and checks that take a long time
๐ Removal: Remove null types and default values from settings, use empty string/array/object instead โ valentjn/vscode-ltex#41
๐ง Change: Use proper server/client model for language server/client
๐ง Change: Make documentation of vscode-ltex more extensive, put it on own website
4.9.3 (May 7, 2020)
๐ง Change: Revert to Java 8
๐ Removal: Remove support for external LanguageTool HTTP servers
4.9.2 (May 6, 2020)
๐ง Change: Update required version of Java (now 11 or newer)
๐ Bug fix: Fix \dots in math mode being interpreted as ...
4.7.9 (February 29, 2020)
๐ง Change: Update Markdown parser Flexmark to 0.60.2; this increases the speed of parsing Markdown
โจ New: Add possibility to ignore Markdown elements or replace them by dummy words via ltex.markdown.ignore and ltex.markdown.dummy โ valentjn/vscode-ltex#26
๐ง Change: Ignore Markdown code blocks by default
๐ง Change: Replace auto-links and inline Markdown code with dummy words by default
๐ Bug fix: Fix match positions were sometimes off by one, especially in Markdown documents
โจ New: Support multi-root workspaces, all configuration settings except ltex.enabled are now resource-specific โ valentjn/vscode-ltex#7
๐ง Change: Save dictionary settings under full language short code (e.g., en-US instead of en). If you already have a dictionary under ltex.en.dictionary and use en-US as language (not en), you have to rename the settings name to ltex.en-US.dictionary (similarly for other languages).
๐ Removal: Remove diagnostics when a file is closed
๐ Bug fix: Prevent insertion of text in TikZ mode
โจ New: Add support for more commands such as \newenvironment, \newgeometry, and \pagenumbering
4.6.13 (September 26, 2019)
๐ Bug fix: Fix LTEX LS not reinitialized after a language extension has been installed (which was missing during initialization)
4.6.12 (September 25, 2019)
๐ Bug fix: Patch LanguageToolโs AnnotatedText with linear interpolation to hopefully fix the fromPos must be less than toPos LT errors for good
๐ Bug fix: Fix \footnote in math mode messed up text mode and math mode
๐ง Change: Increase robustness in case locale or settings are not provided
๐ง Change: Ignore all brace and bracket arguments after \begin{environment} (tabular, array, etc.)
โจ New: Add support for some more commands and environments such as \pagestyle and eqnarray
4.6.11 (September 23, 2019)
๐ Bug fix: Detect and prevent infinite loops in LatexAnnotatedTextBuilder
๐ Bug fix: Fix infinite loop with other line endings than \n
๐ Bug fix: Fix some more fromPos must be less than toPos LT errors
๐ง Change: Check for interrupts to avoid 100% CPU usage on timeout (this doesnโt fix any bugs though)
โจ New: Add support for \email, \href, and \verb|...|
โจ New: Add support for more citation commands (\citep, \citet, etc.)
โจ New: Add support for float/theorem definition commands and starred sectioning commands
4.6.10 (September 18, 2019)
๐ Bug fix: Fix NullPointerException if LanguageTool has not been initialized โ valentjn/ltex-ls#1