clang-format을 사용하여 "들여 쓰기 만"하는 방법이 있습니까?
- 매우 일관성이없는 들여 쓰기가있는 대규모 코드 기반이 있습니다.
- 마침내 코드 포매터를 실행하기 위해 개발자로부터 약간의 동의를 얻었습니다.
- 들여 쓰기는 스타일로 clang-format을 실행하는 것보다 더 가벼운 터치이기 때문에 들여 쓰기를 수정하는 것부터 시작하고 싶습니다.
- 들여 쓰기 만하고 실행
git diff --ignore-space-at-eol --ignore-space-change --ignore-all-space
하면 0 개의 diff 줄이 생기기 때문에 들여 쓰기를 수정하는 것을 좋아 합니다.
- 들여 쓰기 만하고 실행
나는 형식화 된 코드가 어떻게 든 더 나빠지는 상황을 피하고 싶어서 사람들은 clang-format과 같은 것을 통해 우리 코드베이스를 더 좋게 만들려는 미래의 시도를 피하고 싶습니다. 우리의 경우 적어도 우리는 공백 전용, 탭은 4 개의 공백에 동의 할 수 있습니다. 따라서 들여 쓰기 만 개선하는 것은 좋은 일입니다.
Eclipse에는 "정확한 들여 쓰기"기능이 있습니다 (메뉴-> 소스-> 들여 쓰기를 통해) :
- 올바른 들여 쓰기
- 현재 선택 항목 또는 선택 항목이없는 경우 커서가 포함 된 줄에 간단한 들여 쓰기 규칙을 적용합니다.
- Ctrl + I
Eclipse의 "올바른 들여 쓰기"는 들여 쓰기 만 수행하지만 쉘 명령이 아니며 모든 소스 코드 파일에서 명령을 실행할 수 있도록 쉘 명령이 필요합니다.
clang-format을 사용하여 "들여 쓰기 만"하는 방법이 있습니까? 그렇다면 어떻게?
예를 들어 공간 전용, 4 개의 공백이 있습니다.
답변
Clang-format은 항상 기본 형식으로 작동합니다. 사용자 정의 할 수 있습니다. 스타일을 지정하지 않으면 clang-format 기본값이 선택됩니다. [1], [2]
안타깝게도 반드시 들여 쓰기 만 수정할 수는 없습니다.
귀하의 질문에 대한 의견에서 KamilCuk는 indent
아마도https://www.gnu.org/software/indent/
나는 스타일 옵션을 통해 갈 동안 불행하게도이 있습니다,하지만 들여 쓰기를 수행하는 사용자 정의 스타일을 구성하는 방법에 대한 생각처럼 보이는 방법에 따라 코드베이스를 변경할 수있는 몇 가지 AllowShortIfStatementsOnASingleLine
이 것을 허용하지 공존
if (a)
return ;
else {
return;
}
if (b) return ;
else {
return;
}
따라서 코드 기반에 맞는 특정 구성을 찾을 수 있지만 이는 매우 구체적이고 취약 할 수 있습니다.
[1]
구성 파일은 각각 다른 Language : 구성의이 섹션이 대상으로하는 프로그래밍 언어를 나타내는 매개 변수를 갖는 여러 섹션으로 구성 될 수 있습니다. 지원되는 언어 목록은 아래의 언어 옵션에 대한 설명을 참조하십시오. 첫 번째 섹션에는 언어가 설정되어 있지 않을 수 있으며 모든 언어에 대한 기본 스타일 옵션이 설정됩니다. 특정 언어에 대한 구성 섹션은 기본 섹션에 설정된 옵션보다 우선합니다.
https://clang.llvm.org/docs/ClangFormatStyleOptions.html#configuring-style-with-clang-format
[2]
이 섹션에는 지원되는 스타일 옵션이 나열되어 있습니다. 각 옵션에 대해 값 유형이 지정됩니다. 열거 형의 경우 가능한 값은 C ++ 열거 형 멤버 (접두사, 예 : LS_Auto)와 구성에서 사용할 수있는 값 (접두사 없음 : Auto)으로 지정됩니다.
BasedOnStyle (문자열) 구성에 특별히 설정되지 않은 모든 옵션에 사용되는 스타일입니다.
https://clang.llvm.org/docs/ClangFormatStyleOptions.html#configurable-format-style-options
모든 소스 파일에서이 작업을 수행 할 수있는 셸 스크립트는 없지만 settings.json에서 clang 형식 대체 스타일을 지정할 수있는 VSCode를 사용하여 파일을 저장할 때마다 적용됩니다. 일관되게 각각에 동일한 서식을 적용합니다. 다음은 들여 쓰기 너비 4를 적용하는 settings.json C_Cpp.clang_format_fallbackStyle의 예입니다.
"C_Cpp.clang_format_fallbackStyle": " {BasedOnStyle: Google, AllowShortCaseLabelsOnASingleLine: true, AlignConsecutiveDeclarations: true, AllowShortFunctionsOnASingleLine: All, AlignTrailingComments: true, Language: Cpp, AlwaysBreakAfterReturnType: None, PenaltyReturnTypeOnItsOwnLine: 9999, PointerAlignment: Left, SortIncludes: true, IndentWidth: 4, ColumnLimit: 0, BreakBeforeBraces: Allman, SpacesBeforeTrailingComments: 5, AlignAfterOpenBracket: true, AlignConsecutiveAssignments: true, AlignConsecutiveMacros : true}",
https://clang.llvm.org/docs/ClangFormatStyleOptions.html이 문서는이 옵션의 다양한 매개 변수와 값을 설명합니다. 특히 질문에 대해서는 "IndentWidth"및 "UseTab"을 살펴 보겠습니다.