PHP에는 코딩 스타일 가이드가 있는데 PSR-2에 맞지 않을 경우 자동으로 포맷팅을 해주는 확장 프로그램이 있다.
PHP CS FIXER 설치
확장 프로그램에서 php cs fixer를 검색하고 설치한다.
ExampleTest.php
파일의 클래스와 메서드의 열기 괄호의 위치를 변경시키고 커맨드 팔레트에서 Format Document를 실행시키면 아래 그림처럼 PSR-2 형식에 맞게 자동으로 수정하는 것을 확인할 수 있다.
파일 저장할 때 자동으로 포맷팅하기
- 매번 커맨드 팔레트에서 Format Document를 하긴 번거롭기 때문에 파일을 저장할 때 자동으로 포맷팅하도록 설정해두면 매우 편리하게 사용할 수 있다.
- 설정에서
PHP-cs-fixer: onsave
에 체크한다.
.php_cs 파일 생성
-
.php_cs
파일을 만들고php-cs-fixer
의 다양한 기능을 보다 상세하게 설정할 수도 있다. -
아래 내용을
~/.vscode/.php_cs
파일로 저장한다.<?php return PhpCsFixer\Config::create() ->setRules(array( '@PSR2' => true, 'array_indentation' => true, 'array_syntax' => array('syntax' => 'short'), 'combine_consecutive_unsets' => true, 'method_separation' => true, 'no_multiline_whitespace_before_semicolons' => true, 'single_quote' => true, 'binary_operator_spaces' => array( 'align_double_arrow' => false, 'align_equals' => false, ), // 'blank_line_after_opening_tag' => true, // 'blank_line_before_return' => true, 'braces' => array( 'allow_single_line_closure' => true, ), // 'cast_spaces' => true, // 'class_definition' => array('singleLine' => true), 'concat_space' => array('spacing' => 'one'), 'declare_equal_normalize' => true, 'function_typehint_space' => true, 'hash_to_slash_comment' => true, 'include' => true, 'lowercase_cast' => true, // 'native_function_casing' => true, // 'new_with_braces' => 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_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_no_useless_inheritdoc' => true, // 'phpdoc_return_self_reference' => 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, // '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, )) //->setIndent("\t") ->setLineEnding("\n");
-
환경설정에서
/Users/사용자명/.vscode/.php_cs
를 추가로 입력한다. 만약.php_cs
파일을~/.vscode
가 아니라 현져 열려있는 작업공간의 루트 디렉토리에 둔다면 굳이~/.vscode/.php_cs
를 추가할 필요는 없다.
php-cs-fixer가 수정해 주는 것들
-
사용하지 않는 use 삭제(사용하지 않은 Illiminate\Http\Request가 삭제된다.)
-
오래된 array 문법 수정
-
작은 따옴표(') 사용
-
괄호 없는 한 줄짜리 if문에 중괄호 붙이기
주의
xe1의 스킨 파일 등 템플릿 문법이 있는 파일을 수정할 때 php-cs-fixer
를 사용하면 파일이 깨질 수 있으므로 이럴 땐 onsave 설정을 비활성화 하고 작업할 필요가 있다.
참고
https://laracasts.com/series/visual-studio-code-for-php-developers/episodes/11