我做了一个git钩子(Hook),在提交之前检查我的代码样式。它将暂存的文件传递给CodeSniffer。我使用PSR-2代码样式,这意味着即使在Windows上,换行符也应为\n。但是即使更改了PhpStorm设置和git设置,它仍然给我一个错误,即换行符为\r\n。为什么会这样?

PhpStorm
使用regex搜索\r\n不会返回实例,因此我认为问题在于git。

coding-style - 为什么根据CodeSniffer我的行尾仍然错误?-LMLPHP

.gitconfig

[core]
    autocrlf = false
    editor = \"C:/Program Files (x86)/GitExtensions/GitExtensions.exe\" fileeditor
    eol = lf
[user]
    name = Thomas Moors
    email = thomas.moors@*****.nl
[merge]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Program Files (x86)/KDiff3/kdiff3.exe
[diff]
    guitool = kdiff3
[difftool "kdiff3"]
    path = C:/Program Files (x86)/KDiff3/kdiff3.exe

错误

coding-style - 为什么根据CodeSniffer我的行尾仍然错误?-LMLPHP

转录:
FILE: ...\Thomas\Documents\example-live\laravel\app\Models\DoMdokUser.php
----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------
 1 | ERROR | [x] End of line character is invalid; expected "\n" but
   |       |     found "\r\n"
----------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------

Time: 105ms; Memory: 4Mb

Fix the error before commit please

编辑:使用另一个编辑器(n ++)的的问题似乎与phpstorm有关。替换\ r \ n可解决问题。那么为什么PHPStorm无法正常工作?

最佳答案



不一定是git。

IDE(PhpStorm)使用标准化的行分隔符(\n / LF)将所有行存储在内存中,当您保存文件时,它将用文件打开时检测到的实际行分隔符替换它们。这也意味着,如果您碰巧在一个文件中包含混合的行尾(例如CRLFLF)..保存后,它将仅使用一种样式(例如,仅LF)。

规范化的行尾允许您以更简单的方式执行正则表达式搜索/替换-无需担心实际符号是什么。

现在-Code Style设置页面-如您在该字段下方的提示中所看到的,它说:“应用于新文件”。这意味着此设置不会以任何方式影响现有文件。

要更改特定现有文件的行尾,请执行以下操作:打开文件,然后通过状态栏..或File | Line Separators中的相应部分进行更改

coding-style - 为什么根据CodeSniffer我的行尾仍然错误?-LMLPHP

coding-style - 为什么根据CodeSniffer我的行尾仍然错误?-LMLPHP



它正常工作-您碰巧不知道如何更改行分隔符样式。

关于coding-style - 为什么根据CodeSniffer我的行尾仍然错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48422694/

10-12 01:23
查看更多