根据 CodeSniffer,为什么我的行尾仍然是错误的?

onl*_*mas 2 coding-style line-endings phpstorm

我做了一个 git 钩子,在提交之前检查我的代码风格。它将暂存文件传递给 CodeSniffer。我使用 PSR-2 代码风格,这意味着换行符\n在 Windows 上应该是偶数。但是,即使在更改 PhpStorm 设置和 git 设置之后,它仍然给我一个错误,即换行符是\r\n. 为什么会发生这种情况?

PhpStorm使用正则表达式
搜索\r\n不会返回实例,所以我认为问题出在 git 上。

在此处输入图片说明

.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
Run Code Online (Sandbox Code Playgroud)

错误

在此处输入图片说明

转录:

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
Run Code Online (Sandbox Code Playgroud)

编辑:使用另一个编辑器 (n++) 问题似乎确实出在 phpstorm 上。替换 \r\n 可以解决问题。那么为什么 PHPStorm 不能正常工作呢?

Laz*_*One 5

\r\n使用正则表达式搜索不会返回实例,所以我认为问题出在 git 上。

不一定使用 git。

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

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


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

要更改特定现有文件的行尾:打开文件并通过状态栏中的相应部分更改它 .. 或通过File | Line Separators

在此处输入图片说明

在此处输入图片说明


那么为什么 PhpStorm 不能正常工作呢?

它工作正常——你只是碰巧不知道如何更改行分隔符样式。