vale
Как обычно, заметки о том, за что зацепилось. Задачи написать исчерпывающее - нет.
https://vale.sh/docs/ - вроде как, самый гибкий и актуальный из нынешних линтеров для текста. Меня интересует в варианте cli, который бесплатен и открыт.
- https://github.com/errata-ai/vale/releases - устанавливается путём скачивания либо скомпилированного бинарника (мой вариант), либо исходников - и компилирования. Либо чо там ещё написано в https://vale.sh/docs/vale-cli/installation/ (snap, brew, choco, docker…)
- https://vale.sh/docs/topics/scoping/#formats – какие языки знает, чтобы не сбиваться на разметку, проверяя текст.
- В емаксе (как основа для проверялки в емаксе - flymake встроенный, flycheck - «модный». https://www.flycheck.org/en/latest/user/flycheck-versus-flymake.html, https://www.flycheck.org/en/latest/user/syntax-checkers.html#flycheck-checker-chains):
- Есть расширение для flymake (https://github.com/tpeacock19/flymake-vale),
- Есть встроенный чекер во flycheck - чтобы прикрутить к емаксу. Пока выбрала flycheck, он есть.
- кажется, не выводит сведения по результатам правил, которые говорят о каких-то общих характеристиках текста, чисто формально привязываясь к 1:1, началу файла. Досадно.
- Требует для работы файл конфига
vale.ini
или_vale.ini
. После заведения в проекте такого файла надо сделатьvale sync
. В конфиге должен быть указан путь до папки styles (или как назовёте, строка конфигаStylesPath = yourfoldername
. Vale может и создать такую папку, и добавить в неё всякого встроенного).- Вообще, при запуске можно и другое имя указать.
- Разные «профили» в одном файле не делаются (а зря), придётся писать разные файлы. «Очевидно же, что» один набор правил, как хорошо писать, на все случаи жизни не сработает. Но можно делать файлы для проектов.
- Если путь к конфигу не указан при запуске, ищет
vale.ini
или_vale.ini
в папке, из которой запущен, и на 6 уровней вверх, потом в домашней папке пользователя. Использует первый найденный. Какое из двух имён смотрит раньше — яхз. - https://vale.sh/generator - предлагаемый генератор конфига, чтоб легче было начать.
- https://vale.sh/docs/topics/config
- определять, к чему применимы правила - https://vale.sh/docs/topics/scoping/
Интересные регэкспы у них:
In addition to the standard Go regex syntax, Vale also supports positive lookahead ((?=re)), negative lookahead ((?!re)), positive lookbehind ((?<=re)), and negative lookbehind ((?<!re)).
- standard Go regex syntax — дают ссылку https://pkg.go.dev/regexp/syntax
- TODO: найти примеры правил с заменами, использующими группы. А то рехнусь парадигмы ко всем словам писать, весёлая специфика русского языка же. :)
- https://vale.sh/hub/ - готовые пакеты правил, скачиваются через указание в конфиге
Packages = Packagename
и далееvale sync
. - cli manual - https://vale.sh/manual/
Словарики
Конкретная папка задаётся в конфиге строкой
Vocab = SomeName
И Somename
должно быть подпапкой папки Vocab в StylesPath
.
В папке SomeName
ожидаются два файла — accept.txt
и reject.txt
.
The effects of using a custom Vocab are as follows:
- Entries in accept.txt are added to every exception list in all styles listed in BasedOnStyles—meaning that you now only need to update your project’s vocabulary to customize third-party styles (rather than the styles themselves).
- Entries in accept.txt are automatically added to a substitution rule (Vale.Terms), ensuring that any occurrences of these words or phrases exactly match their corresponding entry in accept.txt.
- Entries in reject.txt are automatically added to an existence rule (Vale.Avoid) that will flag all occurrences as errors.
This means that your exceptions can be developed independent of a style, allowing you to use the same exceptions with multiple styles or switch styles without having to re-implement them.
The entries are case-sensitive and may also be regular expressions.
Два варианта для случаев, когда учитывать регистр не особо надо:
(?i)MongoDB [Oo]bservability
Первый — а без разницы, какой там где регистр, хоть mOnGoDb пиши. Во втором случае есть выбор между прописной и строчной первой буквой.
Или указать Vale.Terms = NO
, тогда тоже на регистр внимание не особо обращается.
На этом месте я ещё отдельно тихо грущу про регэкспы для всех наших парадигм склонения-спряжения. Скорее всего, писать основу и оставлять сколько-то символов на варианты.
Ignore files are for style creators while vocabularies are for style users. If you’re developing or maintaining a style, you may still want to include a custom spelling rule—MyStyle.Spelling—that packages its own ignore files. As a user of styles, vocabularies should be able to replace the use of ignore files completely.
В стилях, которые расширяют spelling, можно hunspell-ные словарики указать: https://vale.sh/docs/topics/styles/#spelling.
Стили
https://vale.sh/docs/topics/styles/
Стиль - папка в StylePath
, которая содержит YAML-файлы (c расширением .yml) с правилами.
Шаблончик такого файла
# All rules should define the following header keys: # # `extends` indicates the extension point being used (see below for information # on the possible values). extends: existence # `message` is shown to the user when the rule is broken. # # Many extension points accept format specifiers (%s), which are replaced by # extracted values. See the extension-specific sections below for more details. message: "Consider removing '%s'" # `level` assigns the rule's severity. # # The accepted values are suggestion, warning, and error. level: warning # `scope` specifies where this rule should apply -- e.g., headings, sentences, etc. # # See the Markup section for more information on scoping. scope: heading # `link` gives the source for this rule. link: 'https://errata.ai/' # The number of times this rule should raise an alert. # # By default, there is no limit. limit: 1
То бишь, коротенько шаблон:
extends: existence level: warning scope: heading link: 'https://errata.ai/' limit: 1
Варианты правил
- existence — (как в примере выше) реагирует на присутствие. Например, рекомендует удалть неудачное клише. https://vale.sh/docs/topics/styles/#existence
- substitution — предлагает замену. https://vale.sh/docs/topics/styles/#substitution
- occurence — ограничивает количество появлений чего-то в некотором контексте. Типа «три запятых в предложении», «пять слов с -изм в абзаце». https://vale.sh/docs/topics/styles/#occurrence
- repetition — ловит повторы. https://vale.sh/docs/topics/styles/#repetition Запятые из примера выше можно бы и здесь сделать, а вот -изм — уже нет. Можно натравить на все повторы в принципе.
- consistency — не сбиваться между разными вариантами слов. Типа, начали писать «сиянье», значит «сияние» уже не в этом тексте. https://vale.sh/docs/topics/styles/#consistency
- conditional — Отслеживает появление второго элемента при обнаружении первого. Например, если в тексте появилось «во-первых», то «во-вторых» должно быть где-то достаточно близко. https://vale.sh/docs/topics/styles/#conditional
capitalization — Про https://vale.sh/docs/topics/styles/#capitalization
There are a few pre-defined variables that can be passed as matches:
$title: “The Quick Brown Fox Jumps Over the Lazy Dog.” $sentence: “The quick brown fox jumps over the lazy dog.” $lower: “the quick brown fox jumps over the lazy dog.” $upper: “THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.” Additionally, when using match: $title, you can specify a style of either “AP” or “Chicago”.
- metric — меряет удобочитаемость всякими способами. При определённом результате формул предупреждает, что результат таксебе. https://vale.sh/docs/topics/styles/#metric
- spelling — опирается на Hunspell. Можно указывать пути к словарям и нужные словари. https://vale.sh/docs/topics/styles/#spelling
- чтобы игнорировать то, что хочет распознаваться как ошибка:
- указать в текстовом ignore-файле, файл указать в правиле.
- написать фильтр - если у этих слов есть какое-то общее свойство. Там в примере всякие названия, связанные с python и начинающиеся на py.
- чтобы игнорировать то, что хочет распознаваться как ошибка:
- sequence — правила на уровне предложений, вроде как про грамматику. Но их я пока не поняла. https://vale.sh/docs/topics/styles/#sequence
- script — возможность писать произвольные штуки на https://github.com/d5/tengo (https://tengolang.com/). https://vale.sh/docs/topics/styles/#script
Конфиг
Прихватывала частично, что глянулось.
- Format-specific sections apply their settings only to files that match their associated glob pattern. For example, [*] matches all files while [*.{md,txt}] only matches files that end with either .md or .txt. You can have as many format-specific sections as you’d like and settings defined under a more specific section will override those in [*].
- specifies the minimum alert severity that Vale will report. The options are “suggestion”, “warning”, or “error” (defaults to “warning”).
- specifies styles that should have all of their rules enabled.
- enable certain rules within a style, you can do so on an individual basis.
- disable rule on an individual basis.
- change rule severity level.
- allow to exclude certain block-level sections of text that don’t have an associated HTML tag that could be used with SkippedScopes.
- allow you to exclude certain inline-level sections of text that don’t have an associated HTML tag that could be used with IgnoredScopes.
Ссылки
- https://vale.sh/hub/ - пакеты конфигов для Vale. Как использовать было выше.
- https://gitlab.com/gitlab-org/gitlab/-/tree/master/doc/.vale - гитлабные стили
- https://github.com/vultr/vultr-mdtk/blob/main/styles - ещё чьи-то
- https://content-blueprint.com/2022/01/30/how-i-use-vale-as-a-content-strategist/ - простой текстик про «нафига».