swift-mod: 코드 생성과 포매팅 사이의 Swift 코드 수정 도구
요약
swift-mod는 코드 생성과 포매팅 사이에서 Swift 코드를 수정하는 도구입니다. apple/SwiftSyntax를 기반으로 하며, AST 상태를 고려하여 접근 제어나 멤버별 초기화자 같은 보일러플레이트 코드를 자동으로 생성해 생산성을 높여줍니다.
핵심 포인트
- 코드 생성기와 포매터의 중간 역할을 수행합니다.
- AST(Abstract Syntax Tree) 상태를 분석하여 코드 수정이 가능합니다.
- 접근 제어, 멤버별 초기화자 등 반복적인 보일러플레이트 코드를 자동 생성합니다.
swift-mod
코드 생성(code generation)과 포매팅(formatting) 사이에 위치하여 Swift 코드를 수정하는 도구입니다.
개요 (Overview)
swift-mod는 apple/SwiftSyntax를 기반으로 구축된 Swift 코드 수정 도구로, 코드 생성기(code generator)와 포매터(formatter) 사이의 역할을 수행합니다. 이 도구는 AST의 상태를 고려하여 모듈화된 소스 코드에서 접근 제어(access control)나 멤버별 초기화자(memberwise initializers)와 같은 보일러플레이트 코드(boilerplate code)를 생성할 수 있습니다. swift-mod를 도입함으로써 더욱 고급 Swift 코드를 작성하는 생산성을 향상시킬 수 있습니다.
예시 (Example)
- 이전 (Before)
struct Avenger {
var heroName: String
internal var realName: String?
...
- 이후 (After)
+ public struct Avenger {
+ public var heroName: String
internal var realName: String?
...
시작하기 (Getting Started)
-
swift-mod설치(#installation). -
설정 파일 생성.
swift-mod init
- 모든 수정 규칙 확인.
swift-mod rules
swift-mod rules --rule [규칙 이름] # 더 자세한 규칙 설명 표시
-
원하는 에디터로 설정 파일을 편집하고, 문서(documentation)를 참고하세요.
-
실행
swift-mod <입력 파일 목록>
명령어 사용법 (Command Usage)
swift-mod [명령어] [옵션]
모든 명령어는 옵션 -h/--help를 통해 사용법을 표시할 수 있습니다.
run(또는 지정하지 않음)
OVERVIEW: 수정 실행.
USAGE: swift-mod run [--mode <mode>] [--configuration <configuration>] [<paths> ...]
...
init
OVERVIEW: 수정 설정 파일 생성.
USAGE: swift-mod init [--output <output>]
...
rules
OVERVIEW: 규칙 목록 표시.
USAGE: swift-mod rules [--rule <rule>]
...
설정 (Configuration)
수정 규칙과 대상은 YAML 형식의 파일로 정의됩니다. 기본적으로는 이름으로 .swift-mod.yml 파일을 검색합니다.
어떤 파일 이름이든 다음 옵션을 사용하여 전달할 수 있습니다:
swift-mod --configuration <설정>
예시 (Example)
format:
indent: 4
lineBreakBeforeEachArgument: true
...
형식 (Format)
모든 규칙의 형식 설정을 결정합니다. 변경이 발생할 때만 이 설정에 따라 형식이 적용됩니다.
|키(KEY)|값(VALUE)|요구사항(REQUIREMENT)|기본값(DEFAULT)||
|:---|:---|:---|:---|
|indent|공백의 개수 또는 tab으로 텍스트 지정|선택 사항(Optional)|4|
|lineBreakBeforeEachArgument|각 함수 인자 앞에 새 줄을 삽입할지 여부를 나타냄|선택 사항(Optional)|true|
규칙 (Rules)
기본 접근 레벨 (Default Access Level)
|식별자(IDENTIFIER)|개요(OVERVIEW)||
|:---|:---|
|defaultAccessLevel|선언 구문에 적절한 접근 레벨을 할당합니다. (없을 경우)|
|키(KEY)|값(VALUE)|요구사항(REQUIREMENT)|기본값(DEFAULT)||
|:---|:---|:---|:---|
|accessLevel|openOrPublic|public|internal|fileprivate|private|필수(Required)||
|implicitInternal|internal 접근 레벨을 생략할지 여부를 나타냄|선택 사항(Optional)|true|
struct Avenger {
var heroName: String
internal var realName: String?
...
+ public struct Avenger {
+ public var heroName: String
internal var realName: String?
...
기본 멤버별 초기화자 (Default Memberwise Initializer)
|식별자(IDENTIFIER)|개요(OVERVIEW)||
|:---|:---|
|defaultMemberwiseInitializer|타입 선언에서 접근 레벨에 따라 멤버별 초기화자를 정의합니다. (없을 경우)|
|키(KEY)|값(VALUE)|요구사항(REQUIREMENT)|기본값(DEFAULT)||
|:---|:---|:---|:---|
|implicitInitializer|struct 선언에서 internal 초기화자를 생략할지 여부를 나타냄|선택 사항(Optional)|false||
|...||
struct Avenger {
var heroName: String
internal var realName: String?
...
struct Avenger {
var heroName: String
internal var realName: String?
...
무시 규칙 (Ignoring Rules)
swift-mod는 사용자가 주석을 사용하여 노드와 그 자식에 대한 수정을 억제할 수 있도록 허용합니다.
- 모든 규칙 무시 (Ignore all rules)
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
// swift-mod-ignore
// swift-mod-ignore
struct Avenger {
var heroName: String
...
- Ignore specific rule(s)
// swift-mod-ignore: [COMMA DELIMITED RULE IDENTIFIERS]
// swift-mod-ignore: defaultAccessLevel, defaultMemberwiseInitializer
struct Avenger {
var heroName: String
...
설치 (Installation)
Swift Package Manager
다음 내용을 Package.swift의 dependencies에 추가하세요:
dependencies: [
.package(url: "https://github.com/ra1028/swift-mod.git", from: "swift-mod version"),
]
다음 명령을 실행하세요:
swift run -c release swift-mod [COMMAND] [OPTIONS]
Mint
다음 명령을 따라 Mint로 설치하세요:
mint install ra1028/swift-mod
다음 명령을 실행하세요:
mint run ra1028/swift-mod [COMMAND] [OPTIONS]
사전 빌드된 바이너리 사용 (Using a pre-built binary)
최신 GitHub 릴리스에서 swift-mod.zip을 다운로드하여 swift-mod를 설치할 수도 있습니다.
Swift 버전 지원 (Swift Version Support)
swift-mod는 사용 중인 툴체인의 버전에 맞는 SwiftSyntax 버전에 의존합니다.
따라서 사용하고 있는 Swift의 호환 가능한 버전으로 빌드된 swift-mod 버전을 사용해야 합니다.
| Swift Version | Last Supported swift-mod |
|---|---|
| 5.1 | 0.0.2 |
| ... |
개발 (Development)
Pull request, 버그 보고 및 기능 요청은 환영합니다 🚀.
CONTRIBUTING.md 파일을 참조하여 swift-mod에 기여하는 방법을 알아보세요.
다음 명령을 따라 코드를 검증하고 테스트한 후 변경 사항을 제출해 주세요:
make autocorrect # 수정, 포매팅, 린팅 코드 및 Linux XCTest 매니페스트 생성.
make test
또한, swift-mod는 Linux에서 실행하는 것을 지원하므로 Docker를 설치하고 다음 명령을 따라 테스트해야 합니다:
make docker-test
라이선스 (License)
swift-mod는 Apache 2.0 라이선스 하에 공개되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Codex tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기