@@ -17,81 +17,156 @@ invoked via an [API](#api-usage).
17
17
18
18
` swift-format ` depends on [ SwiftSyntax] ( https://github.com/apple/swift-syntax )
19
19
and the standalone parsing library that is distributed as part of the Swift
20
- toolchain. The SwiftSyntax version in use must match the toolchain version, so
21
- you should check out and build ` swift-format ` from the branch that is
22
- compatible with the version of Swift you are using. This version dependency
23
- is also expressed in the ` SwiftSyntax ` dependency in
24
- [ Package.swift] ( Package.swift ) .
25
-
26
- | Xcode Release | Swift Version | ` swift-format ` Branch |
27
- | :-------------:| :---------------------------------------:| :----------------------|
28
- | – | Swift at ` main ` | ` main ` |
29
- | Xcode 13.0 | Swift 5.5 | ` swift-5.5-branch ` |
30
- | Xcode 12.5 | Swift 5.4 | ` swift-5.4-branch ` |
31
- | Xcode 12.0 | Swift 5.3 | ` swift-5.3-branch ` |
32
- | Xcode 11.4 | Swift 5.2 | ` swift-5.2-branch ` |
33
- | Xcode 11.0 | Swift 5.1 | ` swift-5.1-branch ` |
34
-
35
- For example, if you are using Xcode 12.0 (Swift 5.3), you can check out and
36
- build ` swift-format ` using the following commands:
37
-
38
- ```
39
- git clone -b swift-5.3-branch https://github.com/apple/swift-format.git
20
+ toolchain, so you should check out and build ` swift-format ` from the release
21
+ tag or branch that is compatible with the version of Swift you are using.
22
+
23
+ The major and minor version components of ` swift-format ` and SwiftSyntax must
24
+ be the same—this is expressed in the ` SwiftSyntax ` dependency in
25
+ [ Package.swift] ( Package.swift ) —and those version components must match the
26
+ Swift toolchain that is installed and used to build and run the formatter:
27
+
28
+ | Xcode Release | Swift Version | ` swift-format ` Branch / Tags |
29
+ | :----------------| :-----------------------| :---------------------------------|
30
+ | – | Swift at ` main ` | ` main ` |
31
+ | Xcode 13.0–13.2 | Swift 5.5 | ` swift-5.5-branch ` / ` 0.50500.x ` |
32
+ | Xcode 12.5 | Swift 5.4 | ` swift-5.4-branch ` / ` 0.50400.x ` |
33
+ | Xcode 12.0–12.4 | Swift 5.3 | ` swift-5.3-branch ` / ` 0.50300.x ` |
34
+ | Xcode 11.4–11.7 | Swift 5.2 | ` swift-5.2-branch ` / ` 0.50200.x ` |
35
+ | Xcode 11.0–11.3 | Swift 5.1 | ` swift-5.1-branch ` |
36
+
37
+ For example, if you are using Xcode 13.1 (Swift 5.5), you will need
38
+ ` swift-format ` 0.50500.0.
39
+
40
+ ## Getting swift-format
41
+
42
+ If you are mainly interested in using swift-format (rather than developing it),
43
+ then once you have identified the version you need, you can check out the
44
+ source and build it using the following commands:
45
+
46
+ ``` sh
47
+ VERSION=0.50500.0 # replace this with the version you need
48
+ git clone https://github.com/apple/swift-format.git
40
49
cd swift-format
41
- swift build
50
+ git checkout " tags/$VERSION "
51
+ swift build -c release
42
52
```
43
53
44
- You can also add the ` --single-branch ` option if you only want to clone that
45
- specific branch.
54
+ Note that the ` git checkout ` command above will leave the repository in a
55
+ "detached HEAD" state. This is fine if building and running the tool is all you
56
+ want to do.
46
57
47
- The ` main ` branch is used for development and may depend on either a release
48
- version of Swift or on a developer snapshot. Changes committed to ` main `
49
- that are compatible with the latest release branch will be cherry-picked into
50
- that branch.
58
+ Once the build has finished, the ` swift-format ` executable will be located at
59
+ ` .build/release/swift-format ` .
51
60
52
61
To test that the formatter was built succesfully and is compatible with your
53
- Swift toolchain, you can run the following command:
62
+ Swift toolchain, you can also run the following command:
54
63
55
- ```
64
+ ``` sh
56
65
swift test --parallel
57
66
```
67
+
58
68
We recommend using the ` --parallel ` flag to speed up the test run since there
59
69
are a large number of tests.
60
70
61
71
## Command Line Usage
62
72
73
+ The general invocation syntax for ` swift-format ` is as follows:
74
+
75
+ ``` sh
76
+ swift-format [SUBCOMMAND] [OPTIONS...] [FILES...]
77
+ ```
78
+
79
+ The tool supports a number of subcommands, each of which has its own options
80
+ and are described below. Descriptions of the subcommands that are available
81
+ can also be obtained by running ` swift-format --help ` , and the description of
82
+ a specific subcommand can be obtained by using the ` --help ` flag after the
83
+ subcommand name; for example, ` swift-format lint --help ` .
84
+
85
+ ### Formatting
86
+
87
+ ``` sh
88
+ swift-format [format] [OPTIONS...] [FILES...]
63
89
```
64
- swift-format [OPTIONS] FILE...
90
+
91
+ The ` format ` subcommand formats one or more Swift source files (or source code
92
+ from standard input if no file paths are given on the command line). Writing
93
+ out the ` format ` subcommand is optional; it is the default behavior if no other
94
+ subcommand is given.
95
+
96
+ This subcommand supports all of the
97
+ [ common lint and format options] ( #options-supported-by-formatting-and-linting ) ,
98
+ as well as the formatting-only options below:
99
+
100
+ * ` -i/--in-place ` : Overwrites the input files when formatting instead of
101
+ printing the results to standard output. _ No backup of the original file is
102
+ made before it is overwritten._
103
+
104
+ ### Linting
105
+
106
+ ``` sh
107
+ swift-format lint [OPTIONS...] [FILES...]
65
108
```
66
109
67
- The ` swift-format ` tool can be invoked with one or more ` .swift ` source files,
68
- as well as the following command line options:
110
+ The ` lint ` subcommand checks one or more Swift source files (or source code
111
+ from standard input if no file paths are given on the command line) for style
112
+ violations and prints diagnostics to standard error for any violations that
113
+ are detected.
114
+
115
+ This subcommand supports all of the
116
+ [ common lint and format options] ( #options-supported-by-formatting-and-linting ) ,
117
+ as well as the linting-only options below:
118
+
119
+ * ` -s/--strict ` : If this option is specified, lint warnings will cause the
120
+ tool to exit with a non-zero exit code (failure). By default, lint warnings
121
+ do not prevent a successful exit; only fatal errors (for example, trying to
122
+ lint a file that does not exist) cause the tool to exit unsuccessfully.
123
+
124
+ ### Options Supported by Formatting and Linting
125
+
126
+ The following options are supported by both the ` format ` and ` lint `
127
+ subcommands:
69
128
70
- * ` -v/--version ` : Prints the ` swift-format ` version and exits.
129
+ * ` --assume-filename <path> ` : The file path that should be used in
130
+ diagnostics when linting or formatting from standard input. If this option
131
+ is not provided, then ` <stdin> ` will be used as the filename printed in
132
+ diagnostics.
71
133
72
- * ` -m/--mode <format|lint|dump-configuration> ` : The mode in which to run
73
- ` swift-format ` . The ` format ` mode formats source files. The ` lint ` mode
74
- only prints diagnostics indicating style violations. The ` dump-configuration `
75
- mode dumps the default ` swift-format ` configuration to standard output.
134
+ * ` --color-diagnostics/--no-color-diagnostics ` : By default, ` swift-format `
135
+ will print diagnostics in color if standard error is connected to a
136
+ terminal and without color otherwise (for example, if standard error is
137
+ being redirected to a file). These flags can be used to force colors on
138
+ or off respectively, regardless of whether the output is going to a
139
+ terminal.
76
140
77
- If unspecified, the default mode is ` format ` .
141
+ * ` --configuration <file> ` : The path to a JSON file that contains
142
+ [ configurable settings] ( #configuring-the-command-line-tool ) for
143
+ ` swift-format ` . If omitted, a default configuration is use (which
144
+ can be seen by running ` swift-format dump-configuration ` ).
78
145
79
- * ` --configuration <file> ` : The path to a JSON file that contains
80
- [ configurable settings] ( #configuration ) for ` swift-format ` . If omitted, a
81
- default configuration is use (which can be seen by running
82
- ` --mode dump-configuration ` ).
146
+ * ` --ignore-unparsable-files ` : If this option is specified and a source file
147
+ contains syntax errors or can otherwise not be parsed successfully by the
148
+ Swift syntax parser, it will be ignored (no diagnostics will be emitted
149
+ and it will not be formatted). Without this option, an error will be
150
+ emitted for any unparsable files.
83
151
84
- * ` -i /--in-place ` : Overwrites the input files when formatting instead of
85
- printing the results to standard output .
152
+ * ` -p /--parallel ` : Process files in parallel, simultaneously across
153
+ multiple cores .
86
154
87
- * ` -p/--parallel ` : Process files in parallel, simultaneously across
88
- multiple cores.
155
+ * ` -r/--recursive ` : If specified, then the tool will process ` .swift ` source
156
+ files in any directories listed on the command line and their descendants.
157
+ Without this flag, it is an error to list a directory on the command line.
89
158
90
- * ` -r/--recursive ` : If specified, then the tool will process ` .swift ` source
91
- files in any directories listed on the command line and their descendants.
92
- Without this flag, it is an error to list a directory on the command line.
159
+ ### Viewing the Default Configuration
93
160
94
- ### Configuration
161
+ ``` sh
162
+ swift-format dump-configuration
163
+ ```
164
+
165
+ The ` dump-configuration ` subcommand dumps the default configuration in JSON
166
+ format to standard output. This can be used to simplify generating a custom
167
+ configuration, by redirecting it to a file and editing it.
168
+
169
+ ### Configuring the Command Line Tool
95
170
96
171
For any source file being checked or formatted, ` swift-format ` looks for a
97
172
JSON-formatted file named ` .swift-format ` in the same directory. If one is
@@ -111,6 +186,11 @@ See [Documentation/Configuration.md](Documentation/Configuration.md) for a
111
186
description of the configuration file format and the settings that are
112
187
available.
113
188
189
+ ### Miscellaneous
190
+
191
+ Running ` swift-format -v ` or ` swift-format --version ` will print version
192
+ information about ` swift-format ` version and then exit.
193
+
114
194
## API Usage
115
195
116
196
` swift-format ` can be easily integrated into other tools written in Swift.
@@ -133,7 +213,12 @@ Please see the documentation in the
133
213
[ ` SwiftLinter ` ] ( Sources/SwiftFormat/SwiftLinter.swift ) classes for more
134
214
information about their usage.
135
215
136
- ## Development
216
+ ### Checking Out the Source Code for Development
217
+
218
+ The ` main ` branch is used for development. Pull requests should be created
219
+ to merge into the ` main ` branch; changes that are low-risk and compatible with
220
+ the latest release branch may be cherry-picked into that branch after they have
221
+ been merged into ` main ` .
137
222
138
223
If you are interested in developing ` swift-format ` , there is additional
139
224
documentation about that [ here] ( Documentation/Development.md ) .
0 commit comments