#python #regex #yaml #pre-commit #pre-commit.com
#python #регулярное выражение #yaml #предварительная фиксация #pre-commit.com
Вопрос:
Я хотел бы написать pygrep
хук, с pre-commit
помощью которого можно найти случаи, например
.. warning:
(когда это должно быть .. warning::
).
Если я напишу
- repo: local
- id: incorrect-sphinx-directives
name: Check for incorrect Sphinx directives
language: pygrep
entry: .. (autosummary|contents|currentmodule|deprecated|function|image|important|include|ipython|literalinclude|math|module|note|raw|seealso|toctree|versionadded|versionchanged|warning):[^:]
files: .(py|pyx|rst)$
тогда это работает — однако строка нечитаемо длинная. Есть ли способ разделить его на несколько строк?
Я пытался
entry: "
.. (autosummary|contents|currentmodule|deprecated
|function|image|important|include|ipython
|literalinclude|math|module|note|raw|seealso
|toctree|versionadded|versionchanged|warning
):[^:]"
но это не работает (результирующее регулярное выражение отличается).
Есть предложения?
Комментарии:
1. Я не использую регулярное выражение для изменения yaml, не уверен, что вы там имеете в виду
Ответ №1:
Как указано в документации, вы можете использовать подробное выражение:
entry: |
(?x)^(
thing|
other_thing|
other_other_thing
)$
Комментарии:
1.Возможно, стоит упомянуть, что на самом
|
деле делает. Использование>
также может быть жизнеспособным.2. @DaSourcerer это не имеет значения для подробных регулярных выражений python, которые игнорируют внешние пробелы
3. Верно. Имхо, это все еще особенность YAML, которую полезно знать.
4. конечно, но это не имеет значения для этого Q amp; A
Ответ №2:
Решение заключалось в том, чтобы сделать
entry: "
\.\. (autosummary|contents|currentmodule|deprecated
|function|image|important|include|ipython
|literalinclude|math|module|note|raw|seealso
|toctree|versionadded|versionchanged|warning
):[^:]"