您好!欢迎来到北极熊网

北极熊网

热门搜索: 任正非传    神雕侠侣    红楼梦   

PHPStorm如何实现自动执行代码格式化

  • 技术服务
  • 来源:北极熊
  • 编辑:佚名
  • 时间:2022-12-31 17:15
  • 阅读:233

在我们日常开发中,一定少不了 PHP CS Fixer 来帮我们统一代码风格,但是PHP CS Fixer 不像 ESLint 一样,可以在 PHPStorm 中在保存时自动执行。

PHPStorm如何实现自动执行代码格式化

PHPStorm 并没有为我们提供可执行 PHP CS Fixer 的选项,「重新格式化代码」大部分时都不能满足我们的需求。

为此我们需要在 PHPStorm 中添加一个 「File Watcher」来自动执行代码格式化。

1.首先全局安装 PHP CS Fixer

composer global require friendsofphp/php-cs-fixer

2.执行

php-cs-fixer

PHPStorm如何实现自动执行代码格式化

代表安装成功了,如果提示命令未找到,那么你需要将全局 composer vendor 目录添加到全局变量,我用的是 zsh,这里改成你自己的。

echo 'export PATH="$HOME/.composer/vendor/bin:$PATH"' >> ~/.zshrc

3.打开 PHPStorm,添加自定义文件

PHPStorm如何实现自动执行代码格式化

程序文件地址,命令行输入,并填入

which php-cs-fixer

PHPStorm如何实现自动执行代码格式化

参数栏:

fix $FileDir$/$FileName$

到这就搞定了,现在每当我们保存时就会自动执行 php-cs-fixer,现在还有一个问题,是可能每个项目有不同的 .php-cs.dist 格式化配置文件,以上的配置是使用了全局 php-cs-fixer 配置文件,如果要使用单独的配置文件,需要修改配置如下:

fix --config=$ProjectFileDir$/.php-cs.dist $FileDir$/$FileName$

.php-cs.dist 通常放在项目根目录。

最后附上 .php-cs.dist 配置文件

<?php$header = <<<'EOF'EOF;$finder =  PhpCsFixerFinder::create()
            ->exclude('tests/Fixtures')   //排除文件            ->in(__DIR__);return PhpCsFixerConfig::create()
    ->setRiskyAllowed(true)
    ->setRules([
        '@PSR2'                                 => true,
        '@Symfony:risky'                        => true,
        'array_syntax'                          => ['syntax' => 'short'],
        'combine_consecutive_unsets'            => true,   //多个unset,合并成一个        // one should use PHPUnit methods to set up expected exception instead of annotations        'general_phpdoc_annotation_remove'      => ['expectedException', 'expectedExceptionMessage', 'expectedExceptionMessageRegExp'], //phpdocs中应该省略已经配置的注释        //'header_comment'                        => array('header' => $header), //添加,替换或者删除 header 注释。        'heredoc_to_nowdoc'                     => true,     //删除配置中多余的空行和/或者空行。        'no_extra_consecutive_blank_lines'      => ['break', 'continue', 'extra', 'return', 'throw', 'use', 'parenthesis_brace_block', 'square_brace_block', 'curly_brace_block'],
        'no_unreachable_default_argument_value' => false, //在函数参数中,不能有默认值在非缺省值之前的参数。有风险        'no_useless_else'                       => true,  //删除无用的eles        'no_useless_return'                     => true,  //删除函数末尾无用的return        'no_empty_phpdoc'                       => true,  // 删除空注释        'no_empty_statement'                    => true,  //删除多余的分号        'no_leading_namespace_whitespace'       => true,  //删除namespace声明行包含前导空格        'no_spaces_inside_parenthesis'          => true,  //删除括号后内两端的空格        'no_trailing_whitespace'                => true,  //删除非空白行末尾的空白        'no_unused_imports'                     => true,  //删除未使用的use语句        'no_whitespace_before_comma_in_array'   => true,  //删除数组声明中,每个逗号前的空格        'no_whitespace_in_blank_line'           => true,  //删除空白行末尾的空白        'ordered_class_elements'                => false, //class elements排序        'ordered_imports'                       => false, // use 排序        'phpdoc_add_missing_param_annotation'   => true,   //添加缺少的 Phpdoc @param参数        'phpdoc_trim'                           => true,
        //   'phpdoc_trim_consecutive_blank_line_separation' => true, //删除在摘要之后和PHPDoc中的描述之后,多余的空行。        'phpdoc_order'                          => true,
        'psr4'                                  => true,
        // 'strict_comparison'                     => true,   //严格比较,会修改代码有风险        //'strict_param'                          => true,        'ternary_operator_spaces'               => true,  //标准化三元运算的格式        'ternary_to_null_coalescing'            => true,  //尽可能使用null合并运算符??。需要PHP> = 7.0。        'whitespace_after_comma_in_array'       => true, // 在数组声明中,每个逗号后必须有一个空格        'trim_array_spaces'                     => true,  //删除数组首或尾随单行空格        'align_multiline_comment'               => [                   //每行多行 DocComments 必须有一个星号(PSR-5),并且必须与第一行对齐。            'comment_type' => 'phpdocs_only'        ],
        'array_indentation'                 => true,  //数组的每个元素必须缩进一次    ])
    ->setFinder($finder);



全部评论(0)
资讯详情页最新发布上方横幅
推荐阅读
  • 《孙子兵法》全文(附白话译文)
  • 《孙子兵法》全文(附白话译文)
  • 《孙子兵法》第一章:始计1、孙子曰:兵者,国之大事,死生之地,存亡之道,不可不察也。【译文】孙子说:战争是国家的大事,它关系着人民的生死和宗庙社稷的存亡,是不可不认真考察了解的。2、故经之以五(事),校之以计,而索其情:一曰道,二曰天,三曰地,四曰将,五曰法。道者,令民与上同意也,故可(以)与之死,可(以)与之生,而不(畏危)〔诡也〕。天者,阴阳、寒暑、时制也。地者,远近、险易、广狭、死生也。将者,智、信、仁、勇、严也。法者,曲制、官道
  • 文库
  • 编辑:佚名
  • 时间:2023-03-26 04:56
  • 阅读:2
  • javascript中如何匹配具体数量
  • javascript中如何匹配具体数量
  • 说明1、可花括号的数量说明符可用于指定匹配模式的上下限。但是有时候只需要特定数量的匹配。2、指定一定数量的匹配模式,只需在大括号之间放置一个数字。实例要求修改正则表达式timRegex,以匹配仅有四个字母 m 的单词 Timber。let timStr = "Timmmmber";let timRegex = /change
  • 技术服务
  • 来源:北极熊
  • 编辑:oal
  • 时间:2023-01-01 14:16
  • 阅读:53
  • javascript中先行断言指的是什么
  • javascript中先行断言指的是什么
  • 说明1、先断言是告诉JavaScript在字符串中向前搜索的匹配模式。如果你想在同一个字符串上搜索多个匹配模式,可能会有用。2、先行断言有两种:正向先行断言和负向先行断言。实例let quit = "qu";let noquit = "qt";let quRegex= /q(?=u)/;let qRegex&
  • 技术文档
  • 来源:北极熊
  • 编辑:oal
  • 时间:2023-01-01 14:15
  • 阅读:58
  • 怎么用JavaScript实现截屏功能
  • 怎么用JavaScript实现截屏功能
  • 1.Blob的媒体类型必须是"image/svg+xml"2.需要一个svg元素3.在svg元素里面插入一个 foreignObject 元素4.在foreignObject元素里面放入符合规范的html把dom转成canvas就这么简单,就上面几个步骤。下面是文档给出的一上简单的demo:
  • 技术文档
  • 来源:北极熊
  • 编辑:oal
  • 时间:2023-01-01 14:14
  • 阅读:60
  • javascript是不是解释型语言
  • javascript是不是解释型语言
  • javascript是具有函数优先的轻量级、解释型的编程语言。javascript被广泛用于web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。本文操作环境:windows10系统、javascript1.8.5、thinkpadt480电脑。JavaScript是一种具有函数优先的轻量级,解释型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScr
  • 技术文档
  • 来源:北极熊
  • 编辑:oal
  • 时间:2023-01-01 14:13
  • 阅读:53
联系我们
电话:18936411277
邮箱:1044412291@qq.com
时间:09:00 - 19:00
公众号:北格软件
底部广告