2017-02-07 2 views
3

Я использую grumphp проверить свой код перед тем, и это говорит мне:PHP CS Fixer Symfony и PSR2 правило не существует

F [UnexpectedValueException] Правило «Symfony» не существует.

Exception след: () в /Users/foo/projects/bar/app/vendor/friendsofphp/php-cs-fixer/src/FixerFactory.php:181 PhpCsFixer \ FixerFactory-> useRuleSet() в/Пользователи/foo/projects/bar/app/vendor/friendsofphp/php-cs-fixer/src/Консоль/КонфигурацияResolver.php: 264 PhpCsFixer \ Console \ ConfigurationResolver-> getFixers() at/Users/foo/projects/bar/app/vendor/friendsofphp/php-cs-fixer/src/Console/Command/FixCommand.php: 164 PhpCsFixer \ Console \ Command \ FixCommand-> выполнить() в/Users/foo/projects/bar/app/vendor/symfony/console/Command/Command.php: 261 Symfony \ Component \ Console \ Command \ Command-> run() в /Users/foo/projects/bar/app/vendor/symfony/console/Application.php:817 Symfony \ Component \ Console \ Application-> doRunCommand() в /Users/foo/projects/bar/app/vendor/symfony/console/Application.php:185 Symfony \ Component \ Console \ Application-> doRun() at/Users/foo/projects/bar/app/vendor/symfony/console/Application.php: 116 Symfony \ Component \ Console \ Application-> run() at/Users/foo/projects/bar/app/vendor/friendsofphp/php-cs-fixer/php-cs-fixer: 45

Пробовал выполнять его вручную, и он говорит мне то же самое.

Так что я начал копаться в коде

Я могу видеть, что есть набор правил и закрепитель фабрика вызова $ ruleset-> getRules(), но возвращает только имя правила для Symfony, вместо 91 ключи массива:

array:1 [ 
    0 => "symfony" 
] 

rule_set является

'@Symfony' => array(
       '@PSR2' => true, 
       'binary_operator_spaces' => array(
        'align_double_arrow' => false, 
        'align_equals' => false, 
       ), 
       'blank_line_after_opening_tag' => true, 
       'blank_line_before_return' => true, 
       'cast_spaces' => true, 
       'class_definition' => array('singleLine' => true), 
       'concat_space' => array('spacing' => 'none'), 
       'declare_equal_normalize' => true, 
       'function_typehint_space' => true, 
       'hash_to_slash_comment' => true, 
       'heredoc_to_nowdoc' => true, 
       'include' => true, 
       'lowercase_cast' => true, 
       'method_separation' => true, 
       'native_function_casing' => true, 
       'new_with_braces' => true, 
       'no_alias_functions' => true, 
       'no_blank_lines_after_class_opening' => true, 
       'no_blank_lines_after_phpdoc' => true, 
       'no_empty_comment' => true, 
       'no_empty_phpdoc' => true, 
       'no_empty_statement' => true, 
       'no_extra_consecutive_blank_lines' => array(
        'curly_brace_block', 
        'extra', 
        'parenthesis_brace_block', 
        'square_brace_block', 
        'throw', 
        'use', 
       ), 
       'no_leading_import_slash' => true, 
       'no_leading_namespace_whitespace' => true, 
       'no_mixed_echo_print' => array('use' => 'echo'), 
       'no_multiline_whitespace_around_double_arrow' => true, 
       'no_short_bool_cast' => true, 
       'no_singleline_whitespace_before_semicolons' => true, 
       'no_spaces_around_offset' => true, 
       'no_trailing_comma_in_list_call' => true, 
       'no_trailing_comma_in_singleline_array' => true, 
       'no_unneeded_control_parentheses' => true, 
       'no_unreachable_default_argument_value' => true, 
       'no_unused_imports' => true, 
       'no_whitespace_before_comma_in_array' => true, 
       'no_whitespace_in_blank_line' => true, 
       'normalize_index_brace' => true, 
       'object_operator_without_whitespace' => true, 
       'php_unit_fqcn_annotation' => true, 
       'phpdoc_align' => true, 
       'phpdoc_annotation_without_dot' => true, 
       'phpdoc_indent' => true, 
       'phpdoc_inline_tag' => true, 
       'phpdoc_no_access' => true, 
       'phpdoc_no_alias_tag' => true, 
       'phpdoc_no_empty_return' => true, 
       'phpdoc_no_package' => true, 
       'phpdoc_scalar' => true, 
       'phpdoc_separation' => true, 
       'phpdoc_single_line_var_spacing' => true, 
       'phpdoc_summary' => true, 
       'phpdoc_to_comment' => true, 
       'phpdoc_trim' => true, 
       'phpdoc_types' => true, 
       'phpdoc_var_without_name' => true, 
       'pre_increment' => true, 
       'return_type_declaration' => true, 
       'self_accessor' => true, 
       'short_scalar_cast' => true, 
       'single_blank_line_before_namespace' => true, 
       'single_class_element_per_statement' => true, 
       'single_quote' => true, 
       'space_after_semicolon' => true, 
       'standardize_not_equals' => true, 
       'ternary_operator_spaces' => true, 
       'trailing_comma_in_multiline_array' => true, 
       'trim_array_spaces' => true, 
       'unary_operator_spaces' => true, 
       'whitespace_after_comma_in_array' => true, 
      ), 

сбоями здесь, в конце концов:

public function useRuleSet(RuleSetInterface $ruleSet) 
    { 
     $fixers = array(); 
     $fixersByName = array(); 
     $fixerConflicts = array(); 

     $fixerNames = array_keys($ruleSet->getRules()); 
     foreach ($fixerNames as $name) { 
     ----->  if (!array_key_exists($name, $this->fixersByName)) { 
      throw new \UnexpectedValueException(sprintf('Rule "%s" does not exist.', $name)); 
      } 

ResolveSet() работает, как ожидалось где-то между resolveSet() и fixerFactory массив ключей затеряться я расследовать дальше, какие-то намеки или рекомендации?

Вопросы на GitHub: https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues/2518 https://github.com/phpro/grumphp/issues/281

ответ

1

РЕШЕНИЕ:

Вам нужно бежать аргументы, с другой @!

@@ Symfony

Это будет выглядеть следующим образом:

phpcsfixer2: 
    allow_risky: false 
    cache_file: ~ 
    config: ~ 
    rules: ['@@Symfony'] 
    using_cache: false 
    path_mode: ~ 
    verbose: true 

Надеется, что это помогает кто-то!

Или вы можете построить обходной путь, который имеет много в других функциональных возможностей:

php_cs.dist

<?php 

$finder = PhpCsFixer\Finder::create() 
    ->exclude(['vendor','tmpl_c']) 
    ->name('*.php5'); 

return PhpCsFixer\Config::create() 
    ->setRules([ 
     '@Symfony' => true, 
     'encoding' => false, 
     'psr0' => false, 
     'psr4' => false, 
     'self_accessor' => false, 
     'no_short_echo_tag' => true, 
     'array_syntax' => ['syntax' => 'short'], 
    ]) 
    ->setFinder($finder); 

Обновлено grumphp.yml

parameters: 
    bin_dir: "./vendor/bin" 
    git_dir: "." 
    hooks_dir: ~ 
    hooks_preset: local 
    stop_on_failure: false 
    ignore_unstaged_changes: false 
    process_async_limit: 10 
    process_async_wait: 1000 
    process_timeout: 60 
    ascii: 
     failed: grumphp-grumpy.txt 
     succeeded: grumphp-happy.txt 
    tasks: 
     git_blacklist: 
      keywords: 
       - "die(" 
       - "var_dump(" 
       - "print_f(" 
       - "dump(" 
       - "dd(" 
       - "exit;" 
      triggered_by: ["php"] 
     git_commit_message: 
      matchers: 
       - /SER-([0-9]*)/ 
      case_insensitive: true 
      multiline: true 
      additional_modifiers: '' 
     git_conflict: ~ 
     phpcsfixer2: 
      allow_risky: false 
      cache_file: ~ 
      config: config/php_cs.dist 
      rules: [] 
      using_cache: false 
      path_mode: ~ 
      verbose: true 
     phpmd: 
      exclude: [] 
      ruleset: ['cleancode', 'codesize', 'naming'] 
      triggered_by: ["php"] 
     phpparser: 
      ignore_patterns: [] 
      kind: php7 
      triggered_by: ["php"] 
      visitors: {} 
     phpunit: ~ 
     phpversion: 
      project: "7.0" 
     shell: ~ 

    testsuites: [] 
    extensions: [] 

Проблема Grumphp с помощью службы Symfony контейнер,

Параметры фидера Php-cs сделаны строчные буквы и знак @ удалены, что заставляет cs fixer не находить правило!

Это происходит в контейнере обслуживания Symfony!

http://symfony.com/doc/current/service_container.html#service-parameters

Если вы хотите использовать строку, которая начинается со знака @ в качестве значения параметра (например, очень безопасный почтовик пароль) в файле YAML, вы должны избежать его, добавив другой знак @ (это относится только к формату YAML )