This file contains a description and a list of options for every rule that ProjLint supports. The rules are sorted alphabetically by their name.
The following is a table of all available rules. Just click an option to get to it's available options.
| Name | Identifier | Correctable? | Description |
|---|
| File Content Regex | file_content_regex | no | Specify files which must or must not include regex(es). |
| File Content Template | file_content_template | no | Specify files which must or must not match a file template. |
| File Existence | file_existence | no | Specify files which must or must not exist. |
| Xcode Build Phases | xcode_build_phases | no | Specify build phases that need to exist and have same content. |
| Xcode Project Navigator | xcode_build_phases | no | Specify how the project navigator should be structured. |
| Option | Type | Required? | Description |
|---|
matching | [String: Regex] | no | Paths with regex to check – fails if given regex doesn't match. |
matching_all | [String: [Regex]] | no | Paths with regexes to check – fails if at least one regex doesn't match. |
matching_any | [String: [Regex]] | no | Paths with regexes to check – fails if all regexes don't match. |
not_matching | [String: Regex] | no | Paths with regex to check – fails if given regex matches. |
not_matching_all | [String: [Regex]] | no | Paths with regexes – fails if all regexes match. |
not_matching_any | [String: [Regex]] | no | Paths with regexes – fails if at least one regex matches. |
Example
rules:
- file_content_regex:
matching_all:
Cartfile:
- "#\\s*[^\\s]+" # Ensure dependencies are commented
- HandySwift
- SwiftyUserDefaults
- SwiftyBeaver
not_matching_all:
Cartfile: # Moya already includes Alamofire, prevent redundancy
- Alamofire
- Moya
| Option | Type | Required? | Description |
|---|
matching | [String: ["template_path/template_url": String, "parameters": [String: Any]] | no | Paths with template & parameters to check – fails if given template with parameters applied doesn't match the file contents. |
Example
rules:
- file_content_template:
matching:
.swiftlint.yml:
template_url: "https://raw.githubusercontent.com/JamitLabs/ProjLintTemplates/master/iOS/SwiftLint.stencil"
parameters:
additionalRules:
- attributes
- empty_count
- sorted_imports
lineLength: 160
Where the file SwiftLint.stencil could be a Stencil template looking like this:
# Basic Configuration
opt_in_rules:
{% for rule in additionalRules %}
- {{ rule }}
{% endfor %}
disabled_rules:
- type_name
included:
- Sources
- Tests
# Rule Configurations
identifier_name:
excluded:
- id
line_length: {{ lineLength }}
Note that a template_path should be specified for local paths and a template_url should be specified if your file needs to be downloaded from the web.
| Option | Type | Required? | Description |
|---|
existing_paths | [String] | no | Files that must exist. |
non_existing_paths | [String] | no | Files that must not exist. |
allowed_paths_regex | [String] | no | A list of regexes matching only allowed paths: files with a path that do not match the regex will trigger a violation. |
Example
rules:
- file_existence:
existing_paths:
- .gitignore
- README.md
- Cartfile
- Cartfile.private
- Cartfile.resolved
non_existing_paths:
- Podfile
- Podfile.lock
allowed_paths_regex:
- (Sources|Tests)/.+\.swift # Sources
- (Resources|Formula)/.+ # Other necessary resources
- \.(build|sourcery|git|templates)/.+ # Necessary files under hidden directories
- ProjLint\.xcodeproj/.+ # Xcode project
- '[^/]+' # Root files (needs quotation because the regex contains reserved yaml characters)
| Option | Type | Required? | Description |
|---|
project_path | String | yes | The (relative) path to the .xcodeproj file. |
target_name | String | yes | The name of the targets whose build phases to be checked. |
run_scripts | [String: String] | yes | The build scripts to be checked – the key is the name, the value the script contents. |
Example
rules:
- xcode_build_phases:
project_path: AmazingApp.xcodeproj
target_name: AmazingApp
run_scripts:
SwiftLint: |
if which swiftlint > /dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download it from https://github.com/realm/SwiftLint"
fi
| Option | Type | Required? | Description |
|---|
project_path | String | yes | The (relative) path to the .xcodeproj file. |
sorted | [String] | no | The group paths to check recursively for sorted entries (aware of inner_group_order). |
inner_group_order | [String OR [String]] | yes | The order of types within groups. Available types: interfaces, code_files, assets, strings, folders, plists, entitlements, others. |
structure | [String: Any] | yes | The structure of files and folders to check for their existence. |
Example
rules:
- xcode_project_navigator:
project_path: AmazingApp.xcodeproj
sorted:
- App/Sources
- App/Generated
- Tests/Sources
- UITests/Sources/
inner_group_order:
- assets
- entitlements
- plists
- strings
- others
- [code_files, interfaces]
- folders
structure:
- App:
- Sources:
- AppDelegate.swift
- Globals:
- Extensions
- Resources:
- Colors.xcassets
- Images.xcassets
- Localizable.strings
- Fonts
- SupportingFiles:
- LaunchScreen.storyboard
- Info.plist
- Tests:
- Sources
- Resources
- SupportingFiles:
- Info.plist
- UITests:
- Sources
- Resources
- SupportingFiles:
- Info.plist
- Extensions
- Frameworks
- Products