Pergunta

Eu quero correr JSLint antes de uma confirmação em qualquer um repositório Mercurial ou Git é feito.

Eu quero isso como uma etapa automática que está configurado em vez de depender do desenvolvedor (principalmente me) lembrando-se de executar JSLint antes de mão. Eu normalmente executado JSLint durante o desenvolvimento, mas deseja especificar um contrato em arquivos JS que eles passam JSLint antes de ser comprometida com o repo.

Para Mercurial, este feitiços página fora a sintaxe precommit, mas as únicas variáveis ??que parecem estar disponível são o Parent1 e parent2 changeset IDs envolvido no cometer. O que eu realmente quero é uma lista de nomes de arquivos que estão envolvidos com a cometer, para que eu possa, em seguida, escolha o arquivo .js e JSLint passar por cima deles.

problema semelhante para GIT , a informação padrão disponível como parte do script precommit parece limitado.

O trabalho de força está chamando estado hg / git status como parte do script precommit, analisar a saída para encontrar JS arquivos, em seguida, fazer o trabalho dessa forma. Eu estava esperando por algo mais fácil, porém, e eu não tenho certeza se chamar status como parte de um gancho precommit refletir as informações corretas. Por exemplo, no Git se as mudanças de arquivos não foram adicionados ainda, mas o git commit usos -a, que os arquivos aparecem na seção correta da saída git status como sendo parte do commit set?

Atualizar : I tem algo de trabalho, é visível aqui: http: // github.com/jrburke/dvcs_jslint/

Foi útil?

Solução

Para git, há exemplos no diretório .git / ganchos. Se você só precisa os nomes de arquivo para JSLint, você poderia usar git diff --name-only, que no meu exemplo irá listar os nomes dos arquivos que diferem do HEAD atual.

Outras dicas

O seguinte é uma variação da @ solução Git do Bitbieger que funciona com Node.js e uma cópia local do nó-JSLint (ou seja, você precisa npm install jslint na raiz do seu diretório do repositório).

Além disso, o script:

  • Executa JSLint sobre todos os arquivos .html e .json, bem como .js
  • Apenas corre JSLint sobre os arquivos que foram adicionados, copiados ou modificados. Isso evita que JSLint de erroring em arquivos que foram renomeados ou excluídos.
  • Replica quaisquer erros JSLint para que o usuário veja
  • Usa as opções --indent 4 --white true JSLint para garantir a consistência código-fonte

Para obtê-lo para o trabalho copiar o seguinte para .git/hooks/pre-commit e não se esqueça de chmod +x .git/hooks/pre-commit

# Pre-commit hook passing files through jslint
#
# This ensures that all js, html and json files are valid and conform
# to expectations.

ROOT_DIR=$(git rev-parse --show-toplevel)
JSLINT="${ROOT_DIR}/node_modules/.bin/jslint --indent 4 --white true"

for file in $(git diff-index --name-only --diff-filter=ACM --cached HEAD -- | grep -P '\.((js)|(html)|(json))$'); do
    if node $JSLINT $file 2>&1 | grep 'No errors found' ; then
        echo "jslint passed ${file}"
        exit 0
    else
        node $JSLINT $file
        exit 1
    fi  
done

JSLint com SpiderMonkey

for js in $(git diff-index --name-only --cached HEAD -- | grep '\.js$'); do
    if jslint.sh $js 2>&1 | grep 'Lint at line' ; then
        echo $js
        exit 1
    else
        echo "js files validated"
        exit 0
    fi  
done
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top