根据 CodeSniffer,为什么我的行尾仍然是错误的?
Why are my line-endings still wrong according to CodeSniffer?
我制作了一个 git 挂钩,用于在提交前检查我的代码风格。它将暂存文件传递给 CodeSniffer。我使用 PSR-2 代码风格,这意味着即使在 Windows 上,换行符也应该是 \n
。然而,即使在更改 PhpStorm 设置和 git 设置后,它仍然给我错误,换行符是 \r\n
。为什么会这样?
PhpStorm
使用正则表达式搜索 \r\n
没有 return 个实例,所以我认为问题出在 git.
.git配置
[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
错误
转录:
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
edit: 使用另一个编辑器 (n++) 问题 似乎出在 phpstorm 上。替换 \r\n 可以解决问题。那么为什么PHPStorm不能正常工作呢?
Searching for \r\n
with regex on does not return instances, so I believe the problem to lie with git.
不一定与git。
IDE (PhpStorm) 使用规范化的行分隔符(即 \n
/ LF
)将所有行存储在内存中,当您保存文件时,它会用实际的行分隔符替换它们打开文件时检测到符号。这也意味着如果您碰巧在一个文件中有混合行结尾(例如 CRLF
和 LF
).. 保存后它将仅使用一种样式(例如仅 LF
)。
规范化的行结尾允许您以更简单的方式执行正则表达式 searches/replaces——无需担心实际符号是什么。
现在 - Code Style
设置页面 - 正如您在该字段下方的提示中看到的那样,它显示:"Applied to new files"。这意味着此设置不会以任何方式影响现有文件。
要更改特定现有文件的行结尾: 打开文件并通过状态栏中的适当部分更改它..或通过 File | Line Separators
So why does PhpStorm not work properly?
它工作正常——你只是碰巧不知道如何更改行分隔符样式。
我制作了一个 git 挂钩,用于在提交前检查我的代码风格。它将暂存文件传递给 CodeSniffer。我使用 PSR-2 代码风格,这意味着即使在 Windows 上,换行符也应该是 \n
。然而,即使在更改 PhpStorm 设置和 git 设置后,它仍然给我错误,换行符是 \r\n
。为什么会这样?
PhpStorm
使用正则表达式搜索 \r\n
没有 return 个实例,所以我认为问题出在 git.
.git配置
[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
错误
转录:
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
edit: 使用另一个编辑器 (n++) 问题 似乎出在 phpstorm 上。替换 \r\n 可以解决问题。那么为什么PHPStorm不能正常工作呢?
Searching for
\r\n
with regex on does not return instances, so I believe the problem to lie with git.
不一定与git。
IDE (PhpStorm) 使用规范化的行分隔符(即 \n
/ LF
)将所有行存储在内存中,当您保存文件时,它会用实际的行分隔符替换它们打开文件时检测到符号。这也意味着如果您碰巧在一个文件中有混合行结尾(例如 CRLF
和 LF
).. 保存后它将仅使用一种样式(例如仅 LF
)。
规范化的行结尾允许您以更简单的方式执行正则表达式 searches/replaces——无需担心实际符号是什么。
现在 - Code Style
设置页面 - 正如您在该字段下方的提示中看到的那样,它显示:"Applied to new files"。这意味着此设置不会以任何方式影响现有文件。
要更改特定现有文件的行结尾: 打开文件并通过状态栏中的适当部分更改它..或通过 File | Line Separators
So why does PhpStorm not work properly?
它工作正常——你只是碰巧不知道如何更改行分隔符样式。