Bump vale-cli/vale to 3.21.0 - #49103
Open
code-infra-renovate[bot] wants to merge 1 commit into
Open
Conversation
Deploy previewBundle size
Check out the code infra dashboard for more information about this PR. |
code-infra-renovate
Bot
force-pushed
the
renovate/vale-cli-vale-3.x
branch
from
September 9, 2026 23:17
97bbfbc to
42f98aa
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:
3.19.0→3.21.0Release Notes
vale-cli/vale (vale-cli/vale)
v3.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)Configuration
📅 Schedule: (in timezone UTC)
* 0-4 * * 7)🚦 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 self-hosted Renovate.