Gostaria de apresentar um linter legĂvel para PHP . Agora ele contĂ©m 16 regras que devem melhorar a legibilidade do cĂłdigo. As principais vantagens incluem:
- velocidade - menos de um segundo por 1000 arquivos
- configuração da linha de base - você não pode corrigir todos os erros no projeto de uma só vez, mas criar uma configuração com os erros atuais. E ignore-os, mas reaja aos novos.
- regras são mais fáceis de escrever do que análogos (subjetivos)
Duas isenções de responsabilidade importantes :
- Eu sou o principal colaborador, entĂŁo posso ser subjetivo. Readable foi originalmente escrito para a empresa belga officient . Eles o usam internamente há algum tempo e decidiram tornar legĂvel um projeto de cĂłdigo aberto.
- Está escrito em JS.
Instalação e lançamento
legĂvel Ă© instalado via npm:
$ npm install @officient/readable --save-dev
Após a instalação, você precisa criar um arquivo de configuração:
$ npx readable --init
E vocĂŞ pode executar:
$ npx readable
regras
Atualmente, existem 16 regras legĂveis:
- namespace-max-files - número máximo de arquivos no namespace
- substituição de argumento - proĂbe alterar o valor dos argumentos da função
- file-max-size - o número máximo de linhas no arquivo
- empty-catch —
catch
- class-comment — - ,
- forbidden-functions — (
eval
,print_r
...) - missing-braces —
if
,for
... - variable-length — (
$id
,$i
) - function-max-size —
- loop-max-size —
- forbidden-function-prefix — . ,
checkSomething
— , ? - if-assigment —
if
- complex-if —
&&
||
if
- ternary-max-length —
- loop-max-nest —
- max-nest —
readable , . — . , - , :
- readable . , .
- . , .
Vamos tomar a regra loop-max-size como um exemplo . Todo o seu cĂłdigo:
const loops = ['for', 'foreach'];
module.exports = {
check(maxLines, tokens, report) {
tokens.matchAll(loops, (token) => {
const end = token.copy().step().stepToClosing(); // skip ()
end.step().stepToClosing();
const lines = (end.current().line - token.current().line);
if (lines > maxLines) {
report(`Loop is longer than ${maxLines} lines [${lines}].`, token.current());
}
});
},
};
A regra declara:
- encontre tudo
for
eforeach
. - Pegue o prĂłximo token
.step()
, será um parêntese aberto(
. Vá para o parêntese de fechamento.stepToClosing()
. - Repita o segundo passo, exceto para o corpo do loop (
{
e}
). - Verifique a duração do corpo do ciclo.
Em vez de uma conclusĂŁo
Eu uso legĂvel em meus projetos como um link adicional para cĂłdigo. Gosto de tudo, principalmente da linha de base (para ser justo, o Salmo tambĂ©m tem isso). Ele tem a oportunidade de ocupar o nicho do linter auxiliar.