2017 © Pedro PelΓ‘ez
 

library hexlet-psr-linter

image

deeem/hexlet-psr-linter

  • Wednesday, August 17, 2016
  • by Dmitry Karpov
  • Repository
  • 1 Watchers
  • 0 Stars
  • 9 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

Hexlet PSR Linter

Build Status Code Climate Test Coverage Issue Count, (*1)

About

Π›ΠΈΠ½Ρ‚Π΅Ρ€, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉ php-ΠΊΠΎΠ΄ Π½Π° соотвСтствиС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π°Π±ΠΎΡ€Ρƒ ΠΏΡ€Π°Π²ΠΈΠ» ΠΈ выводящий ΠΎΡ‚Ρ‡Ρ‘Ρ‚ ΠΎ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡΡ… с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ (Ссли функция для исправлСния описана Π² ΠΏΡ€Π°Π²ΠΈΠ»Π΅). ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… стаТировки Π½Π° hexlet.io, (*2)

Requirements

  • PHP >= 7.0
  • Composer

Install

  1. Установка ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ git-рСпозитория
git clone https://github.com/deeem/hexlet-psr-linter
cd hexlet-psr-linter
make install
  1. Установка с использованиСм composer
composer require deeem/hexlet-psr-linter
  1. Установка с использованиСм composer.json
"require": {
    "deeem/hexlet-psr-linter": "*"
}

ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ строки

НапримСр, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ΄Π° Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ myProject ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ, пСрСчислСнными Π² ruleset.json, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ~/mySniffs, (*3)

bin/psr-linter myProject --sniffs ~/mySniffs --ruleset ruleset.json

Π€ΠΎΡ€ΠΌΠ°Ρ‚ json-Ρ„Π°ΠΉΠ»Π° - ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ массив, (*4)

[
  "FunctionsNamingForCamelCase",
  "VariablesNamingForCamelCase",
  "VariablesNamingForLeadUnderscore"
]

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ описываСт справка, (*5)

bin/psr-linter --help

Для удобство Π²Ρ‹Π·ΠΎΠ²Π°, Π² случаС, Ссли psr-linter установлСн глобально, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ссылку Π½Π° bin-Ρ„Π°ΠΉΠ», (*6)

ln -s path-to-bin/psr-linter /usr/local/bin/psr-linter

ПослС Ρ‡Π΅Π³ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°Π±Ρ€Π°Π², (*7)

psr-linter

ИспользованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

Π—Π° созданиС Π»ΠΈΠ½Ρ‚Π΅Ρ€Π° ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ функция makeLinter, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² наслСдников RulesInterface ΠΈ Ρ„Π»Π°Π³Π° автофикса ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ исходный ΠΊΠΎΠ΄ Π² Π²ΠΈΠ΄Π΅ строки. А Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив, содСрТащий ошибки ΠΈ исправлСнный ΠΊΠΎΠ΄, Ссли Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚., (*8)

<?php
$code = file_get_contents('tests/fixtures/sniffs/variablesNamingForLeadingUnderscore.wrong.php');

require_once 'sniffs/VariablesNamingForLeadUnderscore.php';
$lint = makeLinter([new Rules\VariablesNamingForLeadUnderscore()]);
$linterReport = $lint($code);

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΈΠ΄Ρ‘Ρ‚ с нСсколькими ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ, носящими дСмонстрационный Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€. Для Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, (*9)

ΠŸΡ€Π°Π²ΠΈΠ»Π° дСлятся Π½Π° 2 ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, ΠΏΠΎ возмоТности примСнСния автоисправлСния Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ: * ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ автоматичСски (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сайд-эфСкт) * ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ автоматичСски (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΠ²ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π²ΠΈΠ΄Ρƒ), (*10)

Для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°, Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ инстанс ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ класса: CheckersTemplate - Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΈΠ»ΠΈ FixersTemplate, Π² случаС, Ссли Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ автофикс для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°., (*11)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€Π°Π²ΠΈΠ»Π°, для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° соотвСтствиС стандарта имСнования camelCase:, (*12)

<?php

namespace PsrLinter\Rules;

class VariablesNamingForCamelCase extends FixersTemplate implements RulesInterface
{
    public function check(\PhpParser\Node $node)
    {
        if (( $node instanceof \PhpParser\Node\Expr\Variable ) &&
            (!preg_match('/^[a-z]+([A-Z]?[a-z]+)+$/', $node->name))) {
            $this->addError($node, 'error', 'Names MUST be declared in camelCase.');

            return true;
        }
    }

    public function fix(\PhpParser\Node $node)
    {
        $camelize = function ($word) {
            $allWordsAreUpperCased = implode(array_map(function ($word) {
                return ucfirst(strtolower($word));
            }, explode('_', $word)));

            return lcfirst($allWordsAreUpperCased);
        };

        $node->name = $camelize($node->name);
    }
}

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ находятся Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ shiffs, (*13)

The Versions