[#546] Update how swiftlint is used (#547)

Closes #546

- Have separate swiftlint config for code and for tests.
This commit is contained in:
Michal Fousek 2023-02-28 19:32:36 +01:00 committed by GitHub
parent 2ddce23427
commit a4d35b759f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 176 additions and 3 deletions

View File

@ -1,9 +1,13 @@
# This SwiftLint file is based on this great guideline.
# https://github.com/raywenderlich/swift-style-guide
included:
- secant/
excluded:
- Pods
- xctemplates
- secantTests
- secantUITests
disabled_rules:
- notification_center_detachment
@ -13,6 +17,7 @@ disabled_rules:
- nesting # allow for types to be nested, common pattern in Swift
- multiple_closures_with_trailing_closure
- generic_type_name # allow for arbitrarily long generic type names
- redundant_void_return
- empty_parentheses_with_trailing_closure
opt_in_rules:
@ -61,6 +66,9 @@ opt_in_rules:
- yoda_condition
- todos
analyzer_rules:
- unused_import
custom_rules:
array_constructor:
name: "Array/Dictionary initializer"
@ -124,6 +132,13 @@ identifier_name:
- x
- y
- z
- to
- at
- db
- ua
- nf
- tx
- as
indentation_width:
indentation_width: 4

158
.swiftlint_tests.yml Normal file
View File

@ -0,0 +1,158 @@
# This SwiftLint file is based on this great guideline.
# https://github.com/raywenderlich/swift-style-guide
included:
- secantTests/
- secantUITests/
excluded:
- secant/
- xctemplates/
disabled_rules:
- notification_center_detachment
- orphaned_doc_comment
- todo
- unused_capture_list
- nesting # allow for types to be nested, common pattern in Swift
- multiple_closures_with_trailing_closure
- generic_type_name # allow for arbitrarily long generic type names
- redundant_void_return
- implicitly_unwrapped_optional
- force_unwrapping
- type_body_length
- function_body_length
- file_length
- cyclomatic_complexity
- force_cast
- force_try
- function_parameter_count
- identifier_name
- empty_parentheses_with_trailing_closure
opt_in_rules:
- mark
- array_init
- attributes
- closure_end_indentation
- closure_spacing
- collection_alignment
- colon # promote to error
- convenience_type
- discouraged_object_literal
- empty_collection_literal
- empty_count
- empty_string
- enum_case_associated_values_count
- fatal_error_message
- first_where
- indentation_width
- last_where
- legacy_random
- literal_expression_end_indentation
- multiline_arguments
- multiline_arguments_brackets
- multiline_function_chains
- multiline_literal_brackets
- multiline_parameters
- multiline_parameters_brackets
- no_space_in_method_call
- operator_usage_whitespace
- overridden_super_call
- pattern_matching_keywords
- prefer_self_type_over_type_of_self
- redundant_nil_coalescing
- redundant_type_annotation
- return_arrow_whitespace
- strict_fileprivate
- toggle_bool
# - trailing_closure # weird in SwiftUI
- unneeded_parentheses_in_closure_argument
- vertical_whitespace_closing_braces
- vertical_whitespace_opening_braces
- weak_delegate
- yoda_condition
- todos
analyzer_rules:
- unused_import
custom_rules:
array_constructor:
name: "Array/Dictionary initializer"
regex: '[let,var] .+ = (\[.+\]\(\))'
capture_group: 1
message: "Use explicit type annotation when initializing empty arrays and dictionaries"
severity: warning
string_concatenation:
included: ".*\\.swift"
excluded: ".*Test\\.swift"
name: "String Concatenation"
regex: " \\+ \"|\" \\+ |\\+= \""
message: "Please use string interpolation instead of concatenation"
severity: error
nslog_function_usage:
included: ".*\\.swift"
excluded: ".*Test\\.swift"
name: "Swift NSLog() should not be used in App Code"
regex: "NSLog\\("
message: "The swift NSLog function should not be used."
severity: error
todos:
included: ".*\\.swift"
name: "TODO"
regex: '(TODO|FIXME):\ ([^\[]|\[[^#]|\[#[^1-9])'
message: "TODO or FIXME without issue number. Format TODO: [#...]"
severity: warning
match_kinds:
- comment
attributes:
always_on_same_line:
- "@IBSegueAction"
- "@IBAction"
- "@NSManaged"
- "@objc"
legacy_hashing: error
identifier_name:
excluded:
- i
- id
- x
- y
- z
- to
- at
- db
- ua
- nf
- tx
- as
indentation_width:
indentation_width: 4
line_length:
warning: 150
ignores_urls: true
ignores_function_declarations: true
ignores_comments: true
multiline_arguments:
first_argument_location: next_line
only_enforce_after_first_closure_on_first_line: true
private_over_fileprivate:
validate_extensions: true
trailing_whitespace:
ignores_empty_lines: true
ignores_comments: true
vertical_whitespace:
max_empty_lines: 1

View File

@ -2436,7 +2436,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "swiftlint_version=0.50.3\n\nif which swiftlint >/dev/null; then\n if ![ $(swiftlint version) = $swiftlint_version ]; then\n echo \"warning: Compatible SwiftLint version not installed, download version $swiftlint_version from https://github.com/realm/SwiftLint. Currently installed version is $(swiftlint version)\"\n fi\n \n swiftlint \nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n";
shellScript = "swiftlint_version=0.50.3\n\nif which swiftlint >/dev/null; then\n if ![ $(swiftlint version) = $swiftlint_version ]; then\n echo \"warning: Compatible SwiftLint version not installed, download version $swiftlint_version from https://github.com/realm/SwiftLint. Currently installed version is $(swiftlint version)\"\n fi\n \n echo \"Linting the Secant code\"\n swiftlint lint --config .swiftlint.yml\n echo \"Linting tests\"\n swiftlint lint --config .swiftlint_tests.yml\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n\n";
};
0D26AF90299E8196005260EE /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
@ -2534,7 +2534,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "swiftlint_version=0.50.3\n\nif which swiftlint >/dev/null; then\n if ![ $(swiftlint version) = $swiftlint_version ]; then\n echo \"warning: Compatible SwiftLint version not installed, download version $swiftlint_version from https://github.com/realm/SwiftLint. Currently installed version is $(swiftlint version)\"\n fi\n \n swiftlint \nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n";
shellScript = "swiftlint_version=0.50.3\n\nif which swiftlint >/dev/null; then\n if ![ $(swiftlint version) = $swiftlint_version ]; then\n echo \"warning: Compatible SwiftLint version not installed, download version $swiftlint_version from https://github.com/realm/SwiftLint. Currently installed version is $(swiftlint version)\"\n fi\n \n echo \"Linting the Secant code\"\n swiftlint lint --config .swiftlint.yml\n echo \"Linting tests\"\n swiftlint lint --config .swiftlint_tests.yml\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n\n";
};
/* End PBXShellScriptBuildPhase section */