Update pre-commit hook vale-cli/vale to v3.22.0 - #47
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/vale-cli-vale-3.x
branch
from
September 3, 2026 04:05
4c5c279 to
239800a
Compare
renovate
Bot
force-pushed
the
renovate/vale-cli-vale-3.x
branch
from
September 10, 2026 03:57
239800a to
8c65196
Compare
renovate
Bot
force-pushed
the
renovate/vale-cli-vale-3.x
branch
from
September 17, 2026 20:17
8c65196 to
c4601a7
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.17.1→v3.22.0Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Note: 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 blockquotesConfiguration
📅 Schedule: (in timezone Etc/UTC)
* 0-3 * * 1)🚦 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 was generated by Mend Renovate. View the repository job log.