swift-doc-coverage tool generates documentation coverage report for Swift files and can be used from the command-line on macOS.
The utility checks code documentation comments for each declaration (class, struct, enum, protocol, func, typealias etc.) in Swift files from provided path(s) and generates the documentation coverage report, Xcode warnings of json.
$ swift-doc-coverage -h
OVERVIEW: Generates documentation coverage statistics for Swift files.
USAGE: swift-doc-coverage <inputs> ... [--skips-hidden-files <skips-hidden-files>] [--ignore-regex <ignore-regex>] [--minimum-access-level <minimum-access-level>] [--report <report>] [--output <output>]
ARGUMENTS:
<inputs> One or more paths to directories or Swift files.
OPTIONS:
-s, --skips-hidden-files <skips-hidden-files>
An option to skip hidden files. (default: true)
-i, --ignore-regex <ignore-regex>
Skip source code files with file paths that match the
given regular expression.
-m, --minimum-access-level <minimum-access-level>
The minimum access level of the symbols considered
for coverage statistics: open, public, internal,
fileprivate, private. (default: public)
-r, --report <report> Report modes: coverage, warnings, json. (default:
coverage)
-o, --output <output> The file path for generated report.
--version Show the version.
-h, --help Show help information.
To get the documentation coverage report of Swift files in your directory for public access level and above (open) you can simple run:
$ swift-doc-coverage ./Resources
1) /Resources/Rect/Rect.swift: 50% [1/2] (0.013s)
Undocumented:
<Rect.swift:14:3> var Rect.center
2) /Resources/Size.swift: 0% [0/1] (0.002s)
Undocumented:
<Size.swift:3:1> struct Size
3) /Resources/Point.swift: 0% [0/1] (0.002s)
Undocumented:
<Point.swift:3:1> struct Point
Total: 25% [1/4] (0.023s)
Where:
file:///Resources/Rect/Rect.swift- file path to a found Swift file50%- documentation coverage in percents[1/2]- documented declarations count vs all found declarations count(0.013s)- a processing time<Rect.swift:14:3>- a declaration location in format<filename:line:column>var Rect.center- a declaration name
You can also provide an other minimum access levels (private, interval etc.) to get documentation coverage for more declarations in your code.
You can integrate the utility into your Xcode project to generate warnings for undocumented declarations by adding a build phase script:
Your Target > Build Phases > Add Run Script Phase
swift-doc-coverage "${SOURCE_ROOT}" --report warnings
After running Product > Build command you can see next warnings in Xcode:
⚠️ No documentation for 'var Rect.center'.
⚠️ No documentation for 'struct Size'.
⚠️ No documentation for 'struct Point'.
It's possible to obtain all Swift declarations of your code in JSON format:
$ swift-doc-coverage ./Rect -r json
[
{
"url" : "file:///Rect/Rect.swift",
"declarations" : [
{
"name" : "struct Rect",
"column" : 1,
"accessLevel" : 0,
"keyword" : "struct",
"comments" : [
{
"isDoc" : true,
"text" : "Doc line"
}
],
"line" : 4
},
{
"column" : 3,
"line" : 5,
"comments" : [
],
"accessLevel" : 3,
"name" : "let Rect.index",
"keyword" : "let"
},
{
"name" : "var Rect.origin",
"line" : 8,
"column" : 3,
"comments" : [
{
"isDoc" : true,
"text" : "Doc block"
}
],
"keyword" : "var",
"accessLevel" : 4
},
{
"accessLevel" : 2,
"line" : 11,
"comments" : [
{
"text" : "Comment line",
"isDoc" : false
}
],
"keyword" : "var",
"column" : 3,
"name" : "var Rect.size"
},
{
"name" : "var Rect.center",
"column" : 3,
"line" : 14,
"keyword" : "var",
"accessLevel" : 1,
"comments" : [
{
"text" : "Comment block",
"isDoc" : false
}
]
}
]
}
]
To install the tool just run the following commands in Terminal:
git clone https://github.com/ikhvorost/swift-doc-coverage.git
cd swift-doc-coverage
sudo make install
swift-doc-coverage is available under the MIT license. See the LICENSE file for more info.
