
secretlint v13.0.3
Подключаемый инструмент линтинга для предотвращения коммита учетных данных.
Secretlint 

Secretlint — это подключаемый инструмент линтинга для предотвращения коммитов учетных данных.
Особенности
- Сканер: Находит учетные данные в проекте и сообщает о них
- Дружелюбный к проектам: Просто настроить ваш проект и интегрировать CI-сервисы
- Pre-Commit Hook: Предотвращает коммиты файлов с учетными данными
- Подключаемый: Позволяет создавать собственные правила и гибкую конфигурацию
- Документация: Описывает причину, по которой правило определяет секрет
Быстрый демо-пример
Вы можете просмотреть результат линтинга secretlint на https://secretlint.github.io/.
Быстрый старт
Вы можете попробовать использовать Secretlint в вашем проекте одной командой.
Если у вас уже установлен Docker:
docker run -v `pwd`:`pwd` -w `pwd` --rm -it secretlint/secretlint secretlint "**/*"
Если у вас уже установлен Node.js:
npx @secretlint/quick-start "**/*"
После запуска,
Если вы получили пустой результат и код выхода 0, ваш проект защищен.
В противном случае вы получите отчет об ошибках, и ваш проект содержит учетные данные в сыром виде.

Если вы хотите обеспечить непрерывную безопасность, пожалуйста, ознакомьтесь с следующим руководством по установке и настройте pre-commit hook и CI.
Установка
С помощью Docker
Предварительные требования: Требуется Docker
Используйте наш Docker-контейнер, чтобы получить среду с Node.js и secretlint, работающую так быстро, как вы можете их загрузить.
Вы можете проверить все файлы в текущем каталоге с помощью secretlint следующей командой:
docker run -v `pwd`:`pwd` -w `pwd` --rm -it secretlint/secretlint secretlint "**/*"
secretlint/secretlint Docker-контейнер работает без настройки по умолчанию.
Этот Docker-образ имеет встроенные пакеты:
- @secretlint/secretlint-rule-preset-recommend
- @secretlint/secretlint-rule-pattern
- @secretlint/secretlint-formatter-sarif
Более подробную информацию можно найти в Dockerfile secretlint.
С помощью Node.js
Предварительные требования: Требуется Node.js 22+.
Secretlint написан на JavaScript. Вы можете установить Secretlint с помощью npm:``` npm install secretlint @secretlint/secretlint-rule-preset-recommend --save-dev
Затем вам следует настроить файл конфигурации:```
npx secretlint --init
Наконец, вы можете запустить Secretlint на любом файле или каталоге следующим образом:``` npx secretlint "**/*"
:memo: Secretlint поддерживает [шаблоны glob](https://github.com/mrmlnc/fast-glob#basic-syntax), и шаблоны glob должны быть заключены в двойные кавычки.
Также возможно установить Secretlint глобально с помощью `npm install --global`. Однако мы не рекомендуем это делать, так как некоторые правила могут быть нарушены при глобальной установке.
### Использование единого исполняемого бинарного файла
**Предварительные требования:** Нет
Вы можете использовать команду `secretlint` без Node.js с помощью единого исполняемого бинарного файла.
1. Загрузите последний бинарный файл со [страницы релизов](https://github.com/secretlint/secretlint/releases)
2. Измените права доступа к файлу на исполняемый: `chmod +x ./secretlint`
3. Выполните `./secretlint --init` для создания файла конфигурации
4. Выполните `./secretlint "**/*"` для проверки вашего проекта
Для получения дополнительной информации обратитесь к README в [publish/binary-compiler](https://github.com/secretlint/secretlint/blob/HEAD/publish/binary-compiler).
## Использование
`secretlint --help` показывает справку по использованию.
Secretlint CLI that scan secret/credential data.
Usage
$ secretlint [file|glob*]
Note
supported glob syntax is based on picomatch (the engine used by micromatch)
https://github.com/micromatch/picomatch#globbing-features
https://github.com/micromatch/micromatch#matching-features
Options
--init setup config file. Create .secretlintrc.json file from your package.json
--format [String] formatter name. Default: "stylish". Available Formatter: checkstyle, compact, github, jslint-xml, junit, pretty-error, stylish, tap, unix, json, mask-result, table
--output [path:String] output file path that is written of reported result.
--secretlintrc [path:String] path to .secretlintrc config file. Default: .secretlintrc.*
--secretlintignore [path:String] path to .secretlintignore file. Default: .secretlintignore
--stdinFileName [String] filename to process STDIN content. Some rules depend on filename to check content.
--no-color disable ANSI-color of output.
--no-terminalLink disable terminalLink of output.
--no-maskSecrets disable masking of secret values; secrets are masked by default.
--no-glob disable glob pattern interpretation; treat all inputs as literal file paths.
--no-gitignore disable .gitignore cascade respect; .gitignore files are
respected by default (since v13).
Options for Developer
--profile Enable performance profile.
--secretlintrcJSON [String] a JSON string of .secretlintrc. use JSON string instead of rc file.
Experimental Options
--locale [String] locale tag for translating message. Default: en
Examples
# Scan a single file
$ secretlint ./README.md
# Scan all files (wrap glob in double quotes to avoid shell expansion)
$ secretlint "**/*"
$ secretlint "source/**/*.ini"
# Treat inputs as literal paths (for SvelteKit (group) / Next.js [param] etc.)
$ secretlint --no-glob "src/(auth)/login.ts"
# Lint STDIN content (filename hint affects which rules apply)
$ echo "SECRET" | secretlint --stdinFileName=secret.txt
# Use a custom config file
$ secretlint "**/*" --secretlintrc=.secretlintrc.custom.json
# Scan files ignored by .gitignore (e.g. to verify build artifacts)
$ secretlint --no-gitignore "dist/**/*"
# Mask secrets in a file in-place
$ secretlint .zsh_history --format=mask-result --output=.zsh_history
# Output JSON for programmatic parsing
$ secretlint "**/*" --format=json --output=secretlint-report.json
# Output GitHub Actions annotations in CI
$ secretlint "**/*" --format=github
Exit Status
Secretlint exits with the following values:
- 0:
- Linting succeeded, no errors found.
- Found lint error but --output is specified.
- 1:
- Linting failed, errors found.
- 2:
- Unexpected error occurred, fatal error.
## Конфигурация
Secretlint имеет файл конфигурации `.secretlintrc.{json,yml,js}`.
- Документация: [Настройка Secretlint](https://github.com/secretlint/secretlint/blob/HEAD/docs/configuration.md)
После выполнения `secretlint --init` в вашем каталоге появится файл `.secretlintrc.json`.
В нём вы увидите некоторые правила, настроенные следующим образом:```json
{
"rules": [
{
"id": "@secretlint/secretlint-rule-preset-recommend"
}
]
}
Свойство id — это имя пакета правил secretlint.
У Secretlint нет встроенных правил.
Вы хотите добавить какое-либо правило, поэтому вам следует установить пакет и добавить правило в файл .secretlintrc.
Каждое правило имеет одинаковый шаблон конфигурации:
options: определённая опция для правила. Для получения более подробной информации смотрите документацию каждого правилаdisabled: еслиdisabledравноtrue, правило отключаетсяallowMessageIds:allowMessageIds— это массив идентификаторов сообщений, сообщения о которых вы хотите подавить- идентификатор сообщения определён в каждом правиле; смотрите документацию правила
Пример: options
Например, @secretlint/secretlint-rule-example имеет параметр allows в options.
Этот параметр allows определяет список строк, похожих на RegExp, которые вы хотите игнорировать.```json
{
"rules": [
{
"id": "@secretlint/secretlint-rule-example",
"options": {
"allows": [
"/dummy_secret/i"
]
}
}
]
}
Когда вы используете пресет, например `@secretlint/secretlint-rule-preset-recommend`, вам нужно поместить опцию в `rules`.
Например, опция для `@secretlint/secretlint-rule-preset-recommend > @secretlint/secretlint-rule-aws````json5
{
"rules": [
{
"id": "@secretlint/secretlint-rule-preset-recommend",
"rules": [
{
"id": "@secretlint/secretlint-rule-aws",
"options": {
"allows": [
// it will be ignored
"xxxx-xxxx-xxxx-xxxx-xxxx"
]
}
}
]
}
]
}
Пример: allowMessageIds
Например, вы получили следующий отчёт об ошибке при запуске secretlint:```
$ secretlint "**/*"
SECRET.txt 1:8 error [EXAMPLE_MESSAGE] found secret: SECRET @secretlint/secretlint-rule-example
✖ 1 problem (1 error, 0 warnings)
Идентификатор сообщения этой ошибки — `EXAMPLE_MESSAGE` в `@secretlint/secretlint-rule-example`.
Если вы хотите игнорировать эту ошибку, используйте `allowMessageIds`.```json
{
"rules": [
{
"id": "@secretlint/secretlint-rule-example",
"allowMessageIds": ["EXAMPLE_MESSAGE"]
}
]
}
Когда вы используете пресет, например @secretlint/secretlint-rule-preset-recommend, вам нужно поместить опцию в rules.
Например, если вы хотите игнорировать "AWSAccountID" и "AWSAccessKeyID" из "@secretlint/secretlint-rule-aws", вы можете написать следующее.```json5 { "rules": [ { "id": "@secretlint/secretlint-rule-preset-recommend", "rules": [ { "id": "@secretlint/secretlint-rule-aws", "allowMessageIds": ["AWSAccountID", "AWSAccessKeyID"] } ] } ] }
### Игнорирование файлов с помощью `.gitignore` и `.secretlintignore`
Secretlint обходит файловую систему так же, как и Git, учитывая вложенные файлы `.gitignore`. Файл или каталог, соответствующий любому `.gitignore` на пути от рабочей директории до файла, пропускается.
`.secretlintignore` работает так же, как `.gitignore`, и учитывается дополнительно. Порядок разрешения:
1. Встроенные исключения: `.git`, `node_modules` и семейство `.secretlintrc*`.
2. Файл, указанный через `--secretlintignore` (по умолчанию: `.secretlintignore`).
3. `.gitignore` каждого каталога (каскадно).
Чтобы сканировать файлы, которые игнорируются git — например, файл `.env` в проекте, где `.env` добавлен в `.gitignore` — используйте `--no-gitignore`:```
secretlint --no-gitignore "**/*"
Переход на v13:
.gitignoreтеперь учитывается по умолчанию. Ранее secretlint сканировал все соответствующие файлы независимо от.gitignore. Передайте--no-gitignore, чтобы восстановить предыдущее поведение.- Шаблоны включения используют синтаксис glob библиотеки picomatch (раскрытие фигурных скобок,
**, символьные классы, …). Каскадный стек игнорирования (.gitignore,.secretlintignoreи встроенный список игнорирования) следует стандартной семантике.gitignore, которая НЕ поддерживает раскрытие фигурных скобок — для шаблонов игнорирования пишите**/.cache, а не**/{cache,tmp}.- По умолчанию шаблоны интерпретируются как globs. Если шаблон разрешается в существующий путь на диске, обходчик обрабатывает его буквально, даже если имя содержит метасимволы glob (
[,(,{,?), что повторяет старое поведениеconvertPathToPatternиз globby. Передайте--no-glob, чтобы принудительно использовать буквальную обработку для путей, которые ещё не существуют на диске.- Символические ссылки на каталоги обрабатываются во время поиска (соответствует предыдущему поведению на основе globby), но путь символической ссылки, а не разрешённый целевой путь, виден правилам
.gitignoreи.secretlintignore. Циклы обнаруживаются с помощьюrealpath, поэтому каждый уникальный целевой объект обрабатывается не более одного раза.
Игнорирование с помощью комментариев
@secretlint/secretlint-rule-filter-comments поддерживает комментарии игнорирования, такие как secretlint-disable.```
// secretlint-disable
THIS IS SECRET, BUT IT WILL BE IGNORED
// secretlint-enable
Для получения дополнительных сведений, пожалуйста, обратитесь к [Настройке Secretlint](https://github.com/secretlint/secretlint/blob/HEAD/docs/configuration.md).
## Варианты использования
### Маскировка секретов в сообщениях об ошибках линтинга (поведение по умолчанию)
Secretlint по умолчанию маскирует секреты в сообщениях об ошибках линтинга. Это полезно для предотвращения случайного раскрытия секретов в журналах CI, выводе терминала или при использовании инструментов AI-агентов.```bash
# Secrets are masked by default
$ secretlint "**/*"
Чтобы показать фактические секретные значения в выводе, используйте --no-maskSecrets:```bash
$ secretlint --no-maskSecrets "**/*"
### Исправление секретов
Secretlint не может автоматически исправлять секреты.
Однако полезно то, что `--format=mask-result` маскирует секреты входного файла.
Например, вы можете замаскировать секреты в файле `.zsh_history` и перезаписать его.```bash
$ secretlint .zsh_history --format=mask-result --output=.zsh_history
Пакеты правил
Правила Secretlint реализованы в виде отдельных модулей.
- @secretlint/secretlint-rule-npm
- @secretlint/secretlint-rule-aws
- @secretlint/secretlint-rule-gcp
- @secretlint/secretlint-rule-github
- @secretlint/secretlint-rule-gitlab
- @secretlint/secretlint-rule-privatekey
- @secretlint/secretlint-rule-basicauth
- @secretlint/secretlint-rule-slack
- @secretlint/secretlint-rule-sendgrid
- @secretlint/secretlint-rule-shopify
- @secretlint/secretlint-rule-stripe
- @secretlint/secretlint-rule-openai
- @secretlint/secretlint-rule-anthropic
- @secretlint/secretlint-rule-grafana
- @secretlint/secretlint-rule-groq
- @secretlint/secretlint-rule-linear
- @secretlint/secretlint-rule-1password
- @secretlint/secretlint-rule-database-connection-string
- @secretlint/secretlint-rule-databricks
- @secretlint/secretlint-rule-hashicorp-vault
- @secretlint/secretlint-rule-vercel
- @secretlint/secretlint-rule-azure
- @secretlint/secretlint-rule-docker
- @secretlint/secretlint-rule-figma
- @secretlint/secretlint-rule-cloudflare
- @secretlint/secretlint-rule-tailscale
- @secretlint/secretlint-rule-huggingface
- @secretlint/secretlint-rule-notion
- @secretlint/secretlint-rule-secp256k1-privatekey
- @secretlint/secretlint-rule-no-k8s-kind-secret
- @secretlint/secretlint-rule-pattern
- @secretlint/secretlint-rule-no-homedir
- @secretlint/secretlint-rule-no-dotenv
- @secretlint/secretlint-rule-filter-comments
Кроме того, Secretlint предоставляет предустановку правил, которая включает рекомендуемый набор правил.
- @secretlint/secretlint-rule-preset-recommend
- Рекомендуемый набор правил
Пользовательские правила
Вы можете создать собственное правило secretlint.
Вы хотите получить правило secretlint, подходящее для вашего проекта, и вы можете его создать! Правило secretlint — это просто npm-пакет.
Если вы хотите узнать о создании правила secretlint, обратитесь к docs/secretlint-rule.md.
Интеграции
Pre-commit хук для проекта
Вы можете использовать Secretlint с некоторыми инструментами pre-commit. Это позволяет предотвратить коммит секретных данных с помощью линтинга Secretlint.
Применение secretlint к проекту и повышение безопасности при разработке в команде.
Husky + lint-staged
Сценарий использования: Если вы хотите внедрить secretlint в проект Node.js, эта комбинация будет полезна.
Установите Husky и lint-staged:``` npx husky-init && npm install lint-staged --save-dev
Добавьте хуки в `.husky/pre-commit`:```
npx husky add .husky/pre-commit "npx --no-install lint-staged"
Отредактируйте package.json:```json5
{
// add "lint-staged" field
"lint-staged": {
"*": [
"secretlint --no-glob"
]
}
}
> **Примечание:** Флаг `--no-glob` обязателен, поскольку lint-staged передаёт буквальные пути файлов, которые могут содержать специальные символы глобов (например, шаблоны маршрутизации `(group)` или `[param]`, используемые в Next.js, SvelteKit и т.д.).
Это означает, что каждый проиндексированный файл проверяется Secretlint перед коммитом.
#### [pre-commit](https://github.com/pre-commit/pre-commit)
**Сценарий использования:** У вас есть проект, который разрабатывается с помощью Docker. Легко интегрируется с Secretlint.
Установите [pre-commit](https://pre-commit.com/#install)
# macOS. см. также https://pre-commit.com/#install
brew install pre-commit
Создайте `.pre-commit-config.yaml`:```
- repo: local
hooks:
- id: secretlint
name: secretlint
language: docker_image
entry: secretlint/secretlint:latest secretlint
Пример репозитория с настройкой:
Bash-скрипт
В качестве альтернативы вы можете сохранить этот скрипт как .git/hooks/pre-commit и дать ему права на выполнение (chmod +x .git/hooks/pre-commit):```bash
#!/bin/sh
FILES=$(git diff --cached --name-only --diff-filter=ACMR | sed 's| |\ |g')
[ -z "$FILES" ] && exit 0
Secretlint all selected files
echo "$FILES" | xargs ./node_modules/.bin/secretlint --no-glob
If you using docker
echo "$FILES" | xargs docker run -v pwd:pwd -w pwd --rm secretlint/secretlint secretlint
RET=$? if [ $RET -eq 0 ] ;then exit 0 else exit 1 fi
### Pre-commit Hook глобально
**Сценарий использования:** Если вы хотите проверить любой проект с помощью secretlint, вы можете использовать глобальные хуки git.
[Git 2.9+](https://github.blog/2016-06-13-git-2-9-has-been-released/) поддерживает [`core.hooksPath`](https://git-scm.com/docs/githooks). Это позволяет интегрировать secretlint глобально.
Мы создали пример проекта git хуков, использующего secretlint + Docker.
- [secretlint/git-hooks](https://github.com/secretlint/git-hooks)
- Требование: Docker
Вы можете настроить, выполнив следующие шаги:```shell script
# clone this repository
git clone https://github.com/secretlint/git-hooks git-hooks
cd git-hooks
# integrate secretlint to git hook globally
git config --global core.hooksPath $(pwd)/hooks
После настройки core.hooksPath secretlint проверяет любой файл перед его коммитом.
Для получения дополнительных сведений см. проект secretlint/git-hooks.
Версию Node.js также можно использовать для глобального git hook. Если вас это интересует, см. @azu/git-hooks.
CI
GitHub Actions
Если вы уже настроили secretlint используя Node.js, вы можете запустить secretlint с вашей конфигурацией на GitHub Actions.
Поместите .github/workflows/secretlint.yml в свой репозиторий.```yaml
name: Secretlint
on: [push, pull_request]
permissions:
contents: read
jobs:
test:
name: "Secretlint"
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v3
- name: setup Node.js
uses: actions/setup-node@v3
with:
node-version: 22
- name: Install
run: npm ci
- name: Lint with Secretlint
run: npx secretlint "**/*"
##### `--format github` для аннотаций Pull Request
Вы можете использовать `--format github` для отображения ошибок линтинга в виде аннотаций на файлах Pull Request.
Этот форматировщик выводит [команды рабочего процесса GitHub Actions](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions), которые отображают аннотации ошибок непосредственно на измененных файлах в вашем Pull Request.```yaml
- name: Lint with Secretlint
run: npx secretlint --format github "**/*"
Эта конфигурация интегрирует аннотации кода в Pull Request.

- Example Repository: https://github.com/secretlint/secretlint-github-actions-example
- Example Pull Request: https://github.com/secretlint/secretlint-github-actions-example/pull/1/files
Если вы хотите проверять только файлы изменений (diff), посмотрите следующий пример:```yaml name: test-diff on: push: pull_request: jobs: test-diff: permissions: contents: read name: "Run secretlint to diff files" runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v4 with: # fetch history to get all changed files on push or pull_request event fetch-depth: 0 - name: Get changed files id: changed-files uses: tj-actions/changed-files@v44 with: quotepath: "false" - name: setup Node ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: 22 - name: Show changed files run: echo "${{ steps.changed-files.outputs.all_changed_files }}" - name: Install if: steps.changed-files.outputs.any_changed == 'true' run: npm ci - name: Run secretlint if: steps.changed-files.outputs.any_changed == 'true' run: npx secretlint --no-glob ${{ steps.changed-files.outputs.all_changed_files }}
#### Mega-Linter
[Mega-Linter](https://nvuillam.github.io/mega-linter/) — это агрегатор линтеров, нативно совместимый с любым CI-инструментом, включающий [более 80 приложений для линтинга](https://nvuillam.github.io/mega-linter/supported-linters/), в том числе [**secretlint**](https://nvuillam.github.io/mega-linter/descriptors/credentials_secretlint/) по умолчанию.
Вы можете [установить](https://nvuillam.github.io/mega-linter/installation/) его в любом репозитории проекта, используя следующую команду (Node.js должен быть предварительно установлен)```shell
npx mega-linter-runner --install

Браузер
Secretlint WebExtension работает в вашем браузере.
- Firefox: https://addons.mozilla.org/ja/firefox/addon/secretlint/
- Chrome: https://chrome.google.com/webstore/detail/secretlint/hidpojbnemkajlnibhmeilpgoddkjjkf
Это расширение для браузера предназначено для поиска учётных данных, которые включены в ваши запросы/ответы.

Secretlint WebExtension интегрируется в DevTools в Chrome/Firefox. Это расширение помогает веб-разработчикам замечать раскрытые учётные данные.
macOS
SecureClipboard — это приложение для строки меню macOS, которое использует Secretlint для обнаружения и маскировки секретов в вашем буфере обмена перед их вставкой в другом месте.
Другое
Поддержка формата SARIF
Пожалуйста, используйте @secretlint/secretlint-formatter-sarif.``` npm install @secretlint/secretlint-formatter-sarif --dev secretlint --format @secretlint/secretlint-formatter-sarif "**/*"
## Политика семантического версионирования
Проект Secretlint следует [семантическому версионированию](https://semver.org/ "Семантическое версионирование") ([secretlint-rule-preset-canary](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-preset-canary) является исключением).
- Патч-релиз (предполагается, что не нарушает вашу сборку линтинга)
- Исправление ошибки в CLI или ядре (включая форматтеры).
- Улучшения документации.
- Изменения, невидимые для пользователя, такие как рефакторинг.
- Перевыпуск после неудачного релиза (т.е. публикация версии, которая ни у кого не работает).
- Минорный релиз (может нарушить вашу сборку линтинга)
- Новая опция.
- Существующее правило объявлено устаревшим.
- Создана новая возможность CLI.
- Добавлены новые публичные API (новые классы, новые методы, новые аргументы для существующих методов и т.д.).
- Это может нарушить определения TypeScript.
- Создан новый форматтер.
- Мажорный релиз (нарушает вашу сборку линтинга)
- Новая опция для существующего правила, которая приводит к тому, что secretlint по умолчанию сообщает о большем количестве ошибок.
- Удаление существующего форматтера.
- Добавление нового правила по умолчанию в пресет правил.
- Часть публичного API удалена или изменена несовместимым образом.
## Мотивация
- [git-secrets](https://github.com/awslabs/git-secrets) полезен, но его сложно настраивать для каждого проекта.
- Его основной сценарий использования — глобальная установка.
- Secretlint предназначен для установки в проект и настройки под каждый проект.
- [repo-security-scanner](https://github.com/UKHomeOffice/repo-security-scanner), [Gitleaks](https://github.com/zricethezav/gitleaks) и [truffleHog](https://github.com/dxa4481/truffleHog) — хорошие инструменты сканирования.
- Secretlint требует гибкой настройки, включая правила игнорирования и пользовательские правила.
- [detect-secrets](https://github.com/Yelp/detect-secrets) — похожий инструмент, но он использует подход opt-out (отказ от участия).
- Secretlint использует подход opt-in (согласие на участие).
- Нам также нужны пользовательские правила.
- См. [Bring-your own-plugins (BYOP), via --custom-plugins option by KevinHock · Pull Request #255 · Yelp/detect-secrets](https://github.com/Yelp/detect-secrets/pull/255)
- GitHub поддерживает [сканирование секретов](https://docs.github.com/en/code-security/secret-security/about-secret-scanning), но оно работает только после коммита [~~push~~](https://docs.github.com/en/code-security/secret-scanning/push-protection-for-users).
- Secretlint работает на вашем локальном компьютере и может предотвратить коммит.
## Философия
- Уменьшение количества ложных срабатываний при линтинге.
- Интеграция в рабочий процесс разработки.
- Предоставление пользователям возможности вносить свой вклад.
### Opt-in вместо Opt-out
Secretlint использует подход opt-in (согласие на участие).
Наш опыт показывает, что инструменты линтинга, которые по умолчанию сообщают о различных ошибках, сложны в использовании.
Подход opt-in помогает внедрять Secretlint постепенно.
Это поможет уменьшить количество ложных срабатываний с помощью конфигурации.
### Правило как документация
Мы рассматриваем правило как документацию.
Поэтому каждое правило должно иметь разумную документацию.
Нам нужно объяснять, почему этот файл является ошибкой.
Правило без документации — всего лишь субъективное мнение.
Объяснение причины ошибки поможет уменьшить количество ложных срабатываний.
Кроме того, CLI Secretlint поддерживает гиперссылки в терминале.
Это означает, что вы можете перейти непосредственно к документации правила из сообщения об ошибке линтинга.

> Пример на iTerm 2: Cmd + щелчок по messageId ошибки, чтобы открыть [AWSSecretAccessKey](https://github.com/secretlint/secretlint/blob/master/packages/%40secretlint/secretlint-rule-aws/README.md#awssecretaccesskey) в браузере.
Если вы хотите узнать о поддерживаемых терминалах, см. [Гиперссылки в эмуляторах терминала](https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda).
Также приветствуются любые contributions к документации secretlint!
### Почему Node.js?
- Менеджер пакетов
- Для реализации гибкой плагинной системы требуется менеджер пакетов.
- В Node.js есть npm и pnpm в качестве менеджеров пакетов.
- Менеджер пакетов помогает устанавливать пользовательские плагины/правила.
- Существующая эталонная реализация
- В Node.js уже есть плагинные инструменты линтинга, такие как ESLint, textlint, stylelint и т.д.
- Поэтому пользователи Node.js знакомы с плагинными инструментами линтинга.
- Ранее я создал textlint с тем же подходом, поэтому я знаком с Node.js.
- Пользователи
- JavaScript — популярный язык.
- Это даёт пользователям возможность вносить свой вклад.
- Пользователи могут создавать собственные правила самостоятельно.
Конечно, secretlint также поддерживает [Docker](https://hub.docker.com/r/secretlint/secretlint).
## Список изменений
См. [страницу релизов](https://github.com/secretlint/secretlint/releases).
## Участие
Pull request'ы и звёзды всегда приветствуются.
Для сообщений об ошибках и запросов функций [пожалуйста, создайте issue](https://github.com/secretlint/secretlint/issues).
Также см. [CONTRIBUTING.md](https://github.com/secretlint/secretlint/blob/HEAD/CONTRIBUTING.md) и [CODE_OF_CONDUCT.md](https://github.com/secretlint/secretlint/blob/HEAD/CODE_OF_CONDUCT.md)
### Добавление нового правила
Вы можете использовать команду `pnpm run gen:rule` для создания нового правила.```shell script
pnpm run gen:rule
Для получения дополнительных подробностей, пожалуйста, см. CONTRIBUTING.md
Бенчмарк
Рабочий процесс бенчмарка выполняется при каждом коммите.
Автор
Лицензия
MIT © azu