Swift lint
Swift lint 사용
저는 swift lint와 이걸 소개하는 학습회 영상을 받았는데 끝까지 못 참았어요.
몇 번째 원문 정지가 더 행복하지 않나요?알아차렸기 때문에 겸사겸사 스스로 총결해 봅시다.
그래서 이거.
realm/SwiftLint: A tool to enforce Swift style and conventions.
뭐 공부 해요?
lint라고 들었어요.문법을 분석하는데 뭐가 틀린 놈이야.그거 스위프트 버전.마치.
좋은 설정을 통해 지정된 규칙을 따르지 않는 글쓰기를 발견하면 오류와 경고로 시끄럽게 된다.참 오지랖이 넓다.
팀 업무에서 인코딩 규칙을 강제로 집행할 때 틀림없이 매우 편리할 것이다.
설치하다
Homebrew는 징그러워서 안 써도 돼요.
어차피 자기가 쓸 줄 몰라서 이렇게 종목을 욕하는git.cd <project_dir>
git submodule add https://github.com/realm/SwiftLint.git
이렇게 하면 디렉터리를 만들 수 있으니 설치하세요.중간에 관리자 권한 요청cd swiftLint; make install
이어서 Xcode Project를 호출합니다.
Target 구축 단계가 열리고 왼쪽 상단의 +에 새 실행 단계가 추가되었습니다.틀린 문장을 살짝 놀렸다.if which swiftlint >/dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed. To install, run 'cd <proj_dir>/swiftLint; make install'"
fi
lint이기 때문에 Comple Sources 이후에 실행
마우스로 드래그하여 이동합니다.
cmd-b로 구축, 오류와 경고가 산처럼 대량 생산, lint 씨가 싫어하지 않으면 성공합니다.
구성 파일 만들기
파일이 프로젝트의 디렉터리에 배치되도록 설정하면 됩니다 .swiftlint.yml
.
우선 Pods와 SwiftLint를 제외합니다.cd <project_dir>
vi .swiftlint.yml
# Swift Lint Rules
excluded: # excluded directory
- Pods
- SwiftLint
참고로 코드에 특정 기법에 대한 평론을 써도 조작할 수 있지만 어차피 하지 않는다.원래 하지 말았어야 했는데.// swiftlint:disable <rule>
// swiftlint:enable <rule>
let noWarning2 = NSNumber() as! Int // swiftlint:disable:this force_cast
설정 작성
경고!!!
...이기 때문에 순서대로 죽인다.
마지막에 주목(trailing_whitespace)
.이것은 규칙명인 것 같다.
규칙에 관해서는 출처를 읽어주세요!본격적인 던지기 자세.
See the Source/SwiftLintFramework/Rules directory to see the currently implemented rules.
그러니'벌써 다 됐다'는 마음으로 바라보자.// SwiftLint/Source/SwiftLintFramework/Rules/TrailingWhitespaceRule.swift
public func validateFile(file: File) -> [StyleViolation] {
return file.lines.filter {
$0.content.hasTrailingWhitespace()
}.map {
StyleViolation(ruleDescription: self.dynamicType.description,
severity: configuration.severity,
location: Location(file: file.path, line: $0.index))
}
}
이것은 무엇입니까...
공행하면 예외를 두는 게 일반적인데 왜 설정의 여지가 없지?
이럴 때...
이 경우 disabled_rules: 네가 쓰면 규칙이 무효가 되고 평화가 온다.disabled_rules:
trailing_whitespace #since has no option to treat empty line,,,
추적 후 cmd-b를 한 번 더 하면 경고가 사라집니다.
그래, 그래.
그리고 무의미한 엄격한 행수 제한을 용설란주에 완화시킵니다.line_length: #max length of each line
warning: 200
error: 500
type_body_length: #max line num of class body
warning: 1000
error: 3000
이렇게 하려면 우선 살육이 끝난 규칙부터 시작해야 한다.태그 요소의 표시 속성을 수정합니다.
한마디로 현 상황은 이렇다.완전 개인 주관이야.disabled_rules:
# vvv will never enable
- trailing_whitespace
- opening_brace
- closing_brace
- statement_position
- todo
- force_cast
- force_try
- file_length
- cyclomatic_complexity
# vvv may enable in someday
- return_arrow_whitespace
- control_statement
# vvv may enable in nearday
- legacy_constructor
- legacy_constant
- trailing_newline
#
사용자 정의 규칙
지금까지 표준 규칙의 아쉬움 정도를 알아본 여러분의 기쁜 알림은 사용자 정의 규칙을 정의할 수 있을 것 같습니다.
정규 표현식을 쓰면 돼요.
예를 들면, 이런 느낌.
class와func의 선언 사이에 빈 줄을 넣으세요.custom_rules:
spacer_line:
name: "Spacer Line"
regex: "(\}\n)([ \t]*)((public )|(private )|(internal )|(override ))*((class)|(func))"
message: "Need empty line between func or class"
severity: error
이후match_kinds
형태 분석 결과 때문에 범위를 좁힐 수 있을 것 같지만 어느 것이 무엇으로 처리되었는지는 수수께끼로 사용할 수 없어 아쉽다.
(지금) 기세의 정규 표현식으로 겨우 얼렁뚱땅 넘어갈 수밖에 없다.
감상
최초의 오류 수는 놀랍지만 필요하지 않은 것을 블랙리스트에 넣으면 축소 기능을 사용할 수 있다.
warning/error는 Xcode에서 처리할 수 있기 때문에 구축이 느려지는 것 외에는 모두 가능합니다.
사칭이 어디에 있든 (쉽게 읽히면) 무엇이든 좋습니다. 자신에게는 규칙을 어기면 warning을 보내게 하고,commit 전에 조금만 정리하고 사용하면 편리할 수 있습니다.
또한 {를 if의 다음 줄에 쓰는 것을 허락하지 않기 때문에 이 점에서 전쟁···원래는 사전협상이 중요하다.
기타
실수가 많네요.근데 코드가 기억이 안 나요.
이렇게 생각하면 Swift Lint가 자신의 코드를 평가하고 경고와 오류를 내뱉는 것은 정말 록적이다...
Reference
이 문제에 관하여(Swift lint), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/touta/items/101748780bdede27e72b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
cd <project_dir>
git submodule add https://github.com/realm/SwiftLint.git
cd swiftLint; make install
if which swiftlint >/dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed. To install, run 'cd <proj_dir>/swiftLint; make install'"
fi
cd <project_dir>
vi .swiftlint.yml
# Swift Lint Rules
excluded: # excluded directory
- Pods
- SwiftLint
// swiftlint:disable <rule>
// swiftlint:enable <rule>
let noWarning2 = NSNumber() as! Int // swiftlint:disable:this force_cast
// SwiftLint/Source/SwiftLintFramework/Rules/TrailingWhitespaceRule.swift
public func validateFile(file: File) -> [StyleViolation] {
return file.lines.filter {
$0.content.hasTrailingWhitespace()
}.map {
StyleViolation(ruleDescription: self.dynamicType.description,
severity: configuration.severity,
location: Location(file: file.path, line: $0.index))
}
}
disabled_rules:
trailing_whitespace #since has no option to treat empty line,,,
line_length: #max length of each line
warning: 200
error: 500
type_body_length: #max line num of class body
warning: 1000
error: 3000
disabled_rules:
# vvv will never enable
- trailing_whitespace
- opening_brace
- closing_brace
- statement_position
- todo
- force_cast
- force_try
- file_length
- cyclomatic_complexity
# vvv may enable in someday
- return_arrow_whitespace
- control_statement
# vvv may enable in nearday
- legacy_constructor
- legacy_constant
- trailing_newline
#
custom_rules:
spacer_line:
name: "Spacer Line"
regex: "(\}\n)([ \t]*)((public )|(private )|(internal )|(override ))*((class)|(func))"
message: "Need empty line between func or class"
severity: error
Reference
이 문제에 관하여(Swift lint), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/touta/items/101748780bdede27e72b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)