O pente é uma solução nativa do Emacs Lisp para pesquisar, navegar e anotar ocorrências de expressões regulares em arquivos. A interface interativa permite executar uma classificação exaustiva de todos os resultados para descartar falsos positivos e avalia correspondências adequadas durante a auditoria de código.
M-x package-install RET comb
M-x package-install-file RET /path/to/comb/
( add-to-list 'load-path " /path/to/comb/ " )
( require 'comb )Esta é uma explicação rápida de algumas das características do pente. Para realizar uma pesquisa:
Mova para o diretório raiz do repositório que deseja auditar;
executar Mx comb ;
Pressione c para entrar no modo de configuração;
Preencha os campos desejados e finalmente execute uma pesquisa.
Se houver alguns resultados para navegar, o buffer *Comb* será exibido, daqui é possível anotar os resultados ( ! ) E alterar seu status para aprovado ( a / A ), rejeitado ( r / R ) ou indeciso ( u / U , o padrão).
As ações acima funcionam no resultado atual que pode ser movido para o próximo ( n ) ou o anterior ( p ), ao fazer isso, o buffer *Comb* é atualizado para mostrar o arquivo que contém o resultado, que agora está destacado. Somente resultados correspondentes ao filtro de status (ciclados com f ) e o filtro Notas regexp (definido com F ) são exibidos. Além disso, t gera um buffer que contém a lista dos resultados exibidos atualmente, isso permite o ISearch os trechos e saltar para o resultado no ponto.
Finalmente, é possível salvar a sessão atual para arquivar ( s ) e carregá -la novamente para retomar a auditoria ( l ).
Veja a ajuda ( h ) para obter uma lista de todos os recursos e pedidos de chave.
Os padrões usados pelo pente são regexps com sabor de EMACS (consulte o nó de informação (elisp) Regular Expressions ). O utilitário Mx regexp-builder pode ser usado para experimentar interativamente os regexps antes de executar uma pesquisa, apenas use a sintaxe adequada ( Cc TAB string ) e deixe de fora o ambiente " .
O pente também aceita uma lista de retornos de chamada que podem ser usados para gerar resultados adicionais de pesquisa, por exemplo, proveniente de uma ferramenta de linha externa. Essas funções são executadas com o conjunto default-directory no diretório raiz e o buffer atual definido para o arquivo atualmente processado, eles aceitam um caminho relativo como um argumento e devem retornar uma lista de intervalos no formulário (BEGIN . END) .
Aqui está um exemplo de retorno de chamada:
( defun my-callback ( filename )
" Match only the first occurrence of 'qwerty'. "
( when ( re-search-forward " qwerty " nil t )
( list ( cons ( match-beginning 0 ) ( match-end 0 ))))) Os erros na execução do retorno de chamada não são fatais, eles são relatados no buffer *Messages* .
Algumas faces e opções podem ser configuradas, dê uma olhada no grupo de personalização comb ( Mx customize-group RET comb ).
Além disso, todos os pedidos de chave no buffer *Comb* podem ser alterados alterando o keyymap comb-keymap . Por exemplo, para usar as setas para navegar nos resultados, use:
( define-key comb-keymap ( kbd " <left> " ) 'comb-prev )
( define-key comb-keymap ( kbd " <right> " ) 'comb-next )Isso não desbaste os pedidos de chave originais. Pode ser conveniente substituir completamente o keymap, para evitar colisões com os modos existentes:
( setq comb-keymap ( make-sparse-keymap ))
( define-key comb-keymap ( kbd " x " ) 'comb-quit )
( define-key comb-keymap ( kbd " ? " ) 'comb-help )
( define-key comb-keymap ( kbd " <left> " ) 'comb-prev )
( define-key comb-keymap ( kbd " <right> " ) 'comb-next )
; ; ... Consulte o alist de comb-default-keybindings para obter as funções usadas pelos pedidos de keybindings padrão.