Como Configurar o Harper: Um Verificador Gramatical Offline Sem Vazamento de Dados
TuBrief 편집팀
2026년 7월 25일
0
Computing/Software원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
커뮤니티의 다른 글
댓글 (0)
Log in to leave a comment
아직 작성된 글이 없습니다
원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
Log in to leave a comment
아직 작성된 글이 없습니다
Quando as políticas de segurança corporativas bloqueiam ferramentas externas de IA, como o Grammarly, os desenvolvedores ficam em uma situação complicada. Fazer um deploy mantendo erros de digitação na documentação técnica ou nos comentários do código reduz a credibilidade; por outro lado, revisar tudo manualmente consome um tempo valioso.
O Harper resolve esse problema de forma elegante. Desenvolvido em Rust, ele é um motor de verificação gramatical exclusivamente offline que bloqueia completamente a comunicação com servidores externos. Ao contrário do LanguageTool, que roda em Java e consome centenas de megabytes de memória, o consumo de memória do Harper é de apenas alguns dezenas de megabytes. Com um tempo de resposta inferior a 10ms, ele não causa qualquer lentidão no seu editor.
O harper-ls executa a análise sintática utilizando apenas os recursos da CPU local da máquina. Basta instalar o binário através do gerenciador de pacotes do seu sistema operacional e registrá-lo como um LSP padrão no seu editor.
Execute o comando no terminal para instalar o binário.
brew install harpercargo install harper-ls --lockedscoop install harperNo Neovim, configure os tipos de arquivos alvo e as regras do linter usando o nvim-lspconfig.
`lua
local lspconfig = require('lspconfig')
lspconfig.harper_ls.setup({
filetypes = { 'markdown', 'gitcommit', 'rust', 'go', 'typescript', 'python' },
settings = {
["harper-ls"] = {
userDictPath = "~/config/harper/user_dict.txt",
workspaceDictPath = ".harper-dictionary.txt",
linters = {
SpellCheck = true,
SpelledNumbers = false,
AnA = true,
SentenceCapitalization = false,
UnclosedQuotes = true,
WrongApostrophe = false,
LongSentences = true,
RepeatedWords = true,
Spaces = true,
CorrectNumberSuffix = true
}
}
}
})
`
Ao usar a API LSP nativa do Neovim 0.11 ou superior, configure vim.lsp.config['harper'] e chame vim.lsp.enable('harper'). Para usuários do VS Code, basta instalar a extensão elijah-potter.harper e definir o caminho "harper.path": "/usr/local/bin/harper-ls" no seu .vscode/settings.json.
Como o Harper possui um parser Tree-sitter AST integrado, ele ignora o código-fonte real e verifica apenas o texto em inglês dentro dos blocos de comentários. Se quiser excluir completamente os comentários de uma função específica da verificação, insira uma diretiva inline.
javascript // harper:ignore function processInternalSecurityToken() { // spellcheck:ignore // 내부 보안 토큰 로직 }
Executar apenas com o dicionário de inglês padrão fará com que termos técnicos como gRPC, OAuth2 e Prometheus sejam identificados como erros. Utilizar uma estrutura de dicionário em camadas permite eliminar rapidamente o ruído dos alertas.
O Harper valida as palavras através de 4 camadas.
| Camada do Dicionário | Local de Armazenamento | Finalidade |
|---|---|---|
| Static Dictionary | Embutido no binário harper-ls |
Base de dados padrão de palavras em inglês (não modificável) |
| User Dictionary | ~/.config/harper-ls/dictionary.txt |
Dicionário global para o ambiente de desenvolvimento pessoal |
| Workspace Dictionary | .harper-dictionary.txt na raiz do projeto |
Dicionário de termos exclusivo do projeto (gerenciado via Git) |
| File-Local Dictionary | Salvo no caminho de dados do SO | Armazenamento de identificadores exclusivos de um único arquivo |
.harper-dictionary.txt no diretório raiz do projeto.text Kubernetes gRPC OAuth2 OpenTelemetry Prometheus mTLS Netty Etcd
Ctrl + . no VS Code, ou o atalho de teclado de Code Action no Neovim) para adicionar a palavra diretamente ao .harper-dictionary.txt.Ao enviar esse arquivo para o repositório Git, todos os membros da equipe compartilharão a mesma lista de palavras.
Desative regras inconvenientes ao escrever comentários.
SentenceCapitalization: Defina como false para desativar a regra que força a primeira letra do comentário a ser maiúscula.LongSentences: Defina como false para desativar os avisos de frases longas, comuns em documentações técnicas.SpellCheck e UnclosedQuotes: Mantenha como true para verificar erros de ortografia e aspas não fechadas.Erros de digitação que passaram despercebidos pelo desenvolvedor no editor devem ser bloqueados na etapa de PR. Conectar a ferramenta de CLI harper-cli ao pipeline permite filtrar erros gramaticais automaticamente antes da mesclagem na branch principal.
Defina uma task no arquivo .github/workflows/harper-lint.yml para verificar apenas os arquivos Markdown alterados.
`yaml
name: Technical Documentation Linting
on:
pull_request:
paths:
- 'docs/'
- '.md'
jobs:
harper-grammar-check:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Rust Toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache Harper CLI Binary
uses: actions/cache@v3
with:
path: ~/.cargo/bin/harper-cli
key: ${{ runner.os }}-harper-cli-${{ hashFiles('**/Cargo.lock') }}
- name: Install Harper CLI
run: |
if ! command -v harper-cli &> /dev/null; then
cargo install harper-cli --locked
fi
- name: Get Changed Markdown Files
id: changed-files
run: |
git fetch origin ${{ github.base_ref }}
FILES=$(git diff --name-only --diff-filter=AM origin/${{ github.base_ref }} HEAD | grep '\.md$' || true)
echo "files=$FILES" >> $GITHUB_OUTPUT
- name: Run Harper Lint Check
if: steps.changed-files.outputs.files != ''
run: |
ERRORS=0
for file in ${{ steps.changed-files.outputs.files }}; do
echo "Linting $file with Harper..."
harper-cli lint "$file" || ERRORS=$((ERRORS+1))
done
if [ $ERRORS -gt 0 ]; then
echo "Harper validation failed with $ERRORS error(s)."
exit 1
fi
`
Se você comitar o arquivo .harper-dictionary.txt na raiz do projeto, o runner do CI executará a verificação utilizando a mesma lista de palavras do editor. Caso utilize geradores de sites estáticos (SSG) como MkDocs ou Docusaurus, é mais seguro configurar a execução do comando harper-cli lint docs/ imediatamente antes do script de build.