Repository navigation
chore(deps): update pre-commit hook vale-cli/vale to v3.22.0 - #39
Open
tbhb-dev-renovate[bot] wants to merge 1 commit into
Open
tbhb-dev-renovate[bot] wants to merge 1 commit into
tbhb-dev-renovate[bot] wants to merge 1 commit into
Conversation
tbhb-dev-renovate
Bot
force-pushed
the
renovate/vale
branch
from
August 10, 2026 17:51
ea96ec7 to
9c1f187
Compare
tbhb-dev-renovate
Bot
force-pushed
the
renovate/vale
branch
from
August 25, 2026 20:27
9c1f187 to
e369372
Compare
tbhb-dev-renovate
Bot
force-pushed
the
renovate/vale
branch
from
August 31, 2026 22:30
e369372 to
06797e5
Compare
tbhb-dev-renovate
Bot
force-pushed
the
renovate/vale
branch
from
September 8, 2026 00:08
06797e5 to
4c68ba3
Compare
tbhb-dev-renovate
Bot
force-pushed
the
renovate/vale
branch
from
September 14, 2026 23:42
4c68ba3 to
1b36dff
Compare
Signed-off-by: proofhouse-renovate[bot] <289255489+proofhouse-renovate[bot]@users.noreply.github.com>
tbhb-dev-renovate
Bot
force-pushed
the
renovate/vale
branch
from
September 22, 2026 18:31
1b36dff to
68e8197
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v3.15.2→v3.22.0v3.23.0Note: The
pre-commitmanager in Renovate is not supported by thepre-commitmaintainers or community. Please do not report any problems there, instead create a Discussion in the Renovate repository if you have any questions.Release Notes
vale-cli/vale (vale-cli/vale)
v3.22.0Compare Source
Spelling
split: truechecks the parts of an identifier (getHTTPResponse_v2→get,Response) and reports each at its own position.Vocabularies
Vocab, which adds to the global one and getsVale.<Name>.TermsandVale.<Name>.Avoidrules.Vale.Termsalert offers the entry's spelling as a fix.Configuration
BasedOnStylesclears a section's inherited settings;UNSETclears one rule or style.[formats]key can be a file name or a glob, not only an extension.text.raw,paragraph.link, and so on).TokenIgnoresandBlockIgnoresapply to HTML and DITA.Formats
Changelog
e109c06fix: keep a URL out of prose in code comments and RST79a4875feat: let a scope negate an inline elementcf16166perf: convert a run's DITA files in one toolkit run68e022bfeat: apply ignore patterns to DITAf41bebbfix: cover a promoted RST title with the comment region written above it18dd863fix: apply a vale-off region to a footnote written inside it9bcbf9ftest: pin a vale-off region after front matter and import lines (#1073)344fd9bfix: locate a block's later matches in that block, not in a later copy of its textec7e5f0feat: match a vocabulary phrase across a line wrap, read a period as text, and offer the term as a fix0194fbbfeat: suggest from the project's own words49422defix(mdx): lint a one-line element's text as prose, and keep alerts out of JSX tags5ab91a5fix: place front-matter alerts by the field's position, not by searching the filedcf7f18fix(mdx): end an expression at its brace, keep prose after it, and parse indented blocks8a9fd38fix: keep the whitespace before an inline comment, so the words around it stay apart7c61ce4perf: bound the inline-markup lookahead by byte length, not a rune count of the whole context1e73019fix: read a notebook cell's source with a tagless switch,9e66106feat: let a section name its own vocabulariesfc513c5perf: share a loaded dictionary across spelling rules, and take the regexp2 fold fixf278585feat: lint a Vale rule by its message and description, not its patterns85992f2feat: let a spelling rule split identifiers and check their partscb5885ffeat: suggest in Hunspell's order, and score suggestions against its fixtures52094c7fix: read affix headers with trailing fields, escaped slashes, any-script digits, and Turkic casing17417acfeat: honorIGNORE, convert input by the longestICONVrule inside spell, and read ß as SS in all-caps underCHECKSHARPSa4e2853fix: read aCOMPOUNDRULEas flags and operators, quote its words, and match a capitalized word lower-casedbfd0b42perf: resolve affixed words lazily from roots, and read dictionaries as Hunspell does: per SET, byte flags without FLAG, literal hyphens in classes06325d9feat: adopt Hunspell's case model, and keep ignore-list words case-lenient5452059feat: pass Hunspell's German compounding fixtures:CHECKCOMPOUNDREP,COMPOUNDWORDMAX, prefix strips, and circumfix pairing across levelsa770129feat: applyCHECKCOMPOUNDPATTERN, with replacements, and keep anONLYINCOMPOUNDsuffix off a compound's endf143508feat: check compound position flags, permit and forbid flags,ONLYINCOMPOUND,FORCEUCASE, and word pairsf9178fbfeat: check compound boundaries, apply Hunspell's default BREAK rules, and forbid words per homonym25d8fbctest: run Hunspell's own fixtures as a conformance suitec2d6243feat: let an emptyBasedOnStylesreset a file's inherited rule settings, and addUNSET6c2d99dfeat: let a formats key name a file or a glob, not only an extension62d47dbfix: accept the upper-cased form of a capitalized entry, and suggest in the word's casef8ded8dfeat: let a caller observe each block and time each rulecd86a3cperf: segment a file only when a sentence-scoped rule runs on itcf649e6chore: add commit msg hook2c3aa80fix:hasCaptureGrouplogicv3.21.0Compare Source
doc(...)selectionsA scope term that selects document elements by CSS selector, the same way in every format. Headings are wrapped in nested
sectionelements first, so a rule can name a section:Alone, the selection is one block. Beside a scope,
sentence & doc(...), it narrows that scope to the element. Negated, it excludes it. Ametricrule with a scope now measures each block the scope names, so a section can have a word budget.Docs: Selections, metric
TextFSM Views
A
textfsmView reads plain text through a template in the form Google's TextFSM defined, run by Vale itself. What it captures becomes scopes placed at their line and column, so a rule can target a commit's subject or a transcript's turns. Aconditionalrule's newinkey looks forsecondin another View scope, so a!in a subject can require aBREAKING CHANGE:trailer.Docs: TextFSM guide, conditional
Jupyter notebooks
.ipynbis a format: Markdown cells as Markdown, code cells as code in the kernel's language, outputs skipped. Alerts point into the notebook file itself.Docs: Jupyter
Changelog
ed71176perf: index the walker's context instead of scanning it252d096perf: index rune positions and resume column counts per block0dfd6e8chore: accept configs and docstring in vocab9dfbc90docs: add GitBook badge7285105docs: README5992ffcdocs: update READMEd0ea8b4feat: apply BlockIgnores and TokenIgnores to HTMLb4e2aa7fix: keep the source's space between a dash and inline markup (#1177)4774cedfix: a sequence rule with a negated scope double-reports every match (#1169)91af404fix: make the CLA bot signable0f8ed52feat: lint Jupyter notebooks as a format of their own4da60aafeat: join a selected list into one value, so a notebook cell is one block683a2f6feat: let a conditional look for its consequent in another View scope4c0f64ffix: apply a dasel View to any file its section matches1734e78feat: give an unfilled textfsm value an empty scope, so min can report itabbf2ectest: read past Git's comment lines in the commit View7ebd026fix: name the file and both dasel causes when a View selector fails8aab425fix: let a raw pattern contain a percent sign0c35215fix: place a zero-width match, and report a rule error under a View1e4f6edfix: keep a package's StylesPath out of the path list, and let the project's rule settings winc18dcabci: tell the docs about a releasee0a2250feat: validate actions at load, carry their suggestions, and let edit run a pipelined039c95feat: read plain text through TextFSM templates as a view enginecfddd62feat: select document elements with doc(...) and measure any block42c3ba6fix: keep a line break after inline markup (#1174)v3.20.0Compare Source
Vale 3.20.0 ships a set of features aimed at style authoring at library scale. Std, the new standard library, is built on all three and walks through each; Voices is the first package to consume them.
A rule can extend another rule
An
extendsvalue containing a dot names a rule rather than a check: the new rule starts from that rule's full definition and lays its own keys on top. Two styles can share one carefully built pattern and disagree only about message, level, or a handful of entries:Three lines, your name on the alert, the parent's machinery underneath — including every false-positive guard it ever gains. The parent has to be present on the
StylesPath, not enabled: inheritance is a file reference, andvale syncis what puts the file there. A child can itself be extended, up to ten rules deep. The one thing you can't extend is aVale.*built-in, which is generated at runtime and has no file.A bare key replaces the parent's value outright. Lists and maps also take overlay edits:
key+appends to a parent list, or merges into a parent map with the child's entries winning;key-removes entries by their source text, or the named keys from a map. Removing something the parent doesn't have is a compile error, on purpose: if upstream renames an entry your child was removing, you hear about it when the rule compiles instead of diverging silently. Writing bothkeyandkey+in one file is refused.A directory whose name starts with
_or.is skipped at load time but stays visible toextends, so a pattern shared by several rules can live in one file without itself becoming a rule. A fragment is validated as the chain's root, so it must carry amessage— even one no alert will show.Docs: Extending another rule
Nested rule directories
A style can organize its rules in subdirectories, and the path joins the name:
Std/Grammar/PassiveVoice.ymlisStd.Grammar.PassiveVoiceeverywhere a rule name goes — alerts, configuration, in-text comments, filters, andextends. There is no depth limit, and directories prefixed with.or_are inert, so drafts and shared fragments can sit inside a style without loading.Docs: Nested directories
Tune a rule's scalars from configuration
A bracketed key overrides one scalar on a rule you have enabled, keeping the rule's identity:
The word in brackets is the key as it appears in the rule's YAML, so any scalar a rule declares is a dial. Values coerce at compile time, and an unknown parameter fails the rule's compilation rather than being silently dropped. Structural fields —
tokens,swap,message— are refused with a pointer at extending the rule in a style, which is what authoring is for;[level]is refused because the classicStyle.Rule = errorsyntax already says that.Docs: Parameters
Changelog
fdc4cc7fix: report an occurrence shortfall at the scope that fell shortd978056feat: add an apply mode to vale fix58392fffix: honor comment directives at any indentfcd23e6feat: report per-check alert counts under--counts2545b00docs: add contributor license agreement and PR comments9972e93docs: add AI-Assisted Contributions33f473dix: mask an inline element in SkippedScopes instead of dropping it03e45eefeat(spell): honor Hunspell BREAK rules29e67d2fix(config): keep escaped commas in TokenIgnores and BlockIgnores71b13cafix(spell): narrow COMPOUNDMIN inside its range check8bd83b5chore: bump golang.org/x/crypto to v0.55.0af123f4feat: tune a rule's scalars from configuration05875a9feat: a rule can extend another rule6d97c2dfeat: nested rule directories, and test cases in-source5d33823feat: satisfy negated sequence tokens at boundaries; add region exceptionse9caf5fSatisfy negated sequence tokens at sentence boundariesc62d75ffix: parse a compound stanza at a fixed width, not the target's (#1159)6d22b96refactor: other org refs3f26c98refactor: migrate orgb8560d8fix: read a self-closing tag as the boundary it is (#1157)v3.19.0Compare Source
MDX: JSX children are now linted
Vale now reads a JSX element's children as the Markdown they are — matching MDX's own grammar, where only tags, attributes, and
{...}expressions are JavaScript. The prose inside wrapping components like<Steps>,<Tabs>, or<Aside>is linted at its exact source position, as is the text of inline elements (<abbr>HTML</abbr>— "HTML" is read as part of its sentence). For documentation built on component-heavy frameworks like Astro Starlight, this can mean a quarter of your prose is now covered.Children carry the element's name as a class scope, the same way MyST and Quarto directives work — so a rule can target one component's content (
scope: text.class.Aside), and a component whose content shouldn't be linted can be excluded by name:IgnoredClasses = RawOutputThat's also the escape hatch if you preferred the old skip-everything behavior. Attribute values, expressions, self-closing elements, and elements opened and closed on a single standalone line are still treated as code.
Changelog
405a7dafix: strip a comment's delimiters, not its prose's (#1151)7766415feat(code): add Elixir comment and doc-attribute extraction (#1151)055db43feat: let a sequence token ask for repeated occurrences (#899)9ba5deafeat: lint a JSX element's children as the Markdown they are (#1155)8702043fix: lint a block title as written, without its generated label (#1152)d0e65f4docs: update contributing for native MDX and Typstv3.18.0Compare Source
v3.18.0 is the largest expansion of Vale's format support since v3.0.0.
MDX is now parsed natively —
mdx2vastis no longer required. This release also adds support for four new markup formats: Typst (through the newtypst2vastprogram), Quarto, MyST, and QDoc. R Markdown now works out of the box, and comment extraction now covers Lua, PHP, Haskell, R, Perl, and SCSS.Beyond formats, there's a new
metascope for a document's machine-readable content, a--plain-progressflag, and per-package logging forvale syncin CI — plus a long list of fixes that make alert positions and scoping more accurate across every format.Changelog
6c382ecfix: stop element-scoped rules from matching sentence fragments (#1150)9b9594dfix: don't treat a word before a code span as inline markup (#1147)2b159abfix: stop corrupting suggestions containing 'PIPE'390dda6fix: compile glob patterns once at construction (#1145)fcf0740fix(ls-metrics): prevent panic on empty directory (#1144)dd09d42fix(core): resolve Lang and Transform in section order, not map order (#1143)85ee608fix(dita): report dita's own error output instead of just the exit status (#1141)fd8c2e0refactor: satisfy revive's empty-block2f65b83fix: close display math on any line ending with$$(#1148)e587329fix(lint): treat an HTML comment as a text boundary outside inline elements (#1140)4691bd3docs: add new spotlight37cb109feat: add--plain-progress12fbbd7feat: log each package when sync isn't writing to a terminal9a1a16cfix: mark a QDoc image that has no alt text, and publish inline onesc154ac2Keep the extracted text one line per source line (#1135)8fe9804refactor: CLI clean up and subcommand helpae6d749feat: addvale teste5a0286fix: read a shebang as a POSIX patheec2f59fix: read a .qdocinc as the include it is, and keep meta out of prose7618d04fix: only hand the Docutils source to a Python interpreterb596b0dfix: stop a string run's helper processes the way a file run doesf3f3402fix: keepvale offworking when QDoc prose is escaped54efd3bfix: escape QDoc markup5666297fix: treat a snippet marker inside a QDoc comment as markupc2d1a55feat: add a meta scope for a document's machine-readable content33e4012fix: close QDoc's code blocks on the right command, and scope its divs5ae4867fix: read only/*!as QDoc, and cover commandse60b5bcfix: keep a rule's level in the section that set itc1e2fa0fix: honor IgnoredScopes when a markup format is mapped onto source85c1343fix: place a match inside a block that inline markup rewroteb47ccb0fix: don't mask an autolink's URL twice65f5687fix: skip$…$inline mathb3bade4fix: lint a tight list item's own text as its own block4a6b7cfDon't lint a shebang as a comment (#1134)77179c0fix: report spans against the file's actual bytes7f429e3test: pin issue 1007's frontmatter and blockquote scenariosb049e35feat: support the .scss extensionb678b8dtest: add QML casee82432dfeat: extract Lua, PHP, Haskell, R, and Perl comments with tree-sitter0e2f8bfeat: support QML sources via qml = qdoccc710aafix: treat only block comments as QDoc documentationbd1f33aci: install typst2vast, drop mdx2vast9708be6feat: support Typst15115bffix: place a rewritten block by its longest word, not its last5c91639fix: skip a repeated match's prior occurrences by count, not by maskingdb8c83cfeat: support QDocfca7b79feat: support Quarto286fc59feat: parse MDX natively, dropping mdx2vastfedaf20feat: support MySTeec788dfix: read the character actually beside a match for inline code590278efeat: lint R Markdown out of the box4d8e228fix: strip tab indentation from block comments (#1131)02fb654fix: switch on what every term of a chained scope needsf011cb0fix: keep 'scope: paragraph' out of headings, tables, lists, and blockquotesv3.17.1Compare Source
Changelog
bc78bf3tests: add case for block changed078f4cperf: spend fewer cores on startup and more on large blocks1dd53ffperf: hoist a lookaround shared by every swap keyc8a19c9perf: skip compiling rules the config can never run70aa68ffix: give each Org file its own HTML writer44e5572chore: bump regexp2124ed7cfeat: build for Windows on ARMa335cfarefactor: Warn on unrecognized core options529d382fix: pin the comment fixtures to LFfd1a319docs: stop pinning a version in the security policy20505a3test: replace the Cucumber suite with YAML-driven Go tests4503ee7fix: resolve the default config during a dry rund947f20perf: size the converter pools to the run, not the host72a1502Update SECURITY.md6d08e80docs: fix old linksfdd1844fix: bound and validate rule-embedded scriptsv3.17.0Compare Source
Building on the dependency updates from the previous release, v3.17.0 brings the most significant performance improvements since v3.0.0.
It also brings support for inline scopes and style-level severity changes.
If you use MDX, make sure to update
mdx2vastto v0.5.0 to see the performance gains.Changelog
989be25docs: add sponsorff6de4dfix: stop sharing per-file scope state across goroutines5d413a0fix: name the spelling a vocab term wants, not its pattern5f071efperf: reuse one Docutils interpreter instead of one per file4fd0ba6perf: reuse one mdx2vast process instead of one per filed65b54cperf: keep Asciidoctor running instead of restarting it per fileeea7ac3perf: stop scanning the whole document to place each alertd6308d2docs: update contributingdccf897perf: run one search per block instead of one per line769943cfix: stop narrowing paragraph to a scope nothing carries67f6502fix: read block-comment decoration as decoration, not markupc937d0cperf: stop deduplicating rule runs per text3bf1bb9perf: read literals through a pattern's lookaroundsc795e3eperf: read literals through a pattern's lookarounds1bbfca0perf: decide a rule's scope once per block scope38849c4build: use regexp2 v2.5.4bf80cbaperf: compile the capitalization word pattern once000a253perf: only map runs to the source when something will askd59f600docs: write an actual security policy3a8a295fix: place inline fragments where they actually are8d4b2d0fix: close extracted files properlyb6b4ae4fix: bound COMPOUNDMIN and COMPOUNDRULE8b961fbfeat: support inline scopesb828088feat: allow scoping by class0dc010ctest: add cases for new package-level settings473c6c1feat: allow a setting to be given for a whole style9c1aee1fix: honour a sequence rule's declared scopeff1b04bperf: run each rule once per distinct text59ba324perf: run each rule once per distinct text21743d1perf: locate spelling alerts by offsete29df0eperf: stop searching once a usable match is found5cab109perf: skip rules whose tokens cannot matchd92fed0perf: Split selectors once instead of on every comparison391e3c0fix: stop section styles leaking across globsv3.16.0Compare Source
This release includes a major update to
prose, Vale's underlying NLP library, that brings significant performance improvements across the board.Changelog
4e6335dspell: use strings.Cut for the continuation splitbf76e1espell: follow affix continuation classes37b242adocs: update README linkf439d0fperf: pre-compile Tengo5ea9564perf: stop repeating work in the per-block hot patha165f8dfix: match sequence patterns against whole tokensbe96fa9feat: addmatchCasefor alert reportinge55d29cperf: index line starts instead of counting newlines per alertfd183acperf: slice matches out by offset instead of converting to runes3a29bc0perf: place alerts by offset instead of searching for their text9bd0cf9feat: match universal POS tags in sequenceab05648fix: locate sequence matches by position, not by searching6e87b3echore: drop our regexp2 forkf7d2f10chore: move NLP to the new prose/v3 libraryConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate.