Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Disabling custom rules from within a nested yml file throws warning #3521

Closed
2 tasks done
tobiasjordan opened this issue Feb 11, 2021 · 6 comments
Closed
2 tasks done

Comments

@tobiasjordan
Copy link

tobiasjordan commented Feb 11, 2021

New Issue Checklist

Describe the bug

I get a warning when disabling a custom rule, defined in the top-level config file from within a nested config file:
warning: 'non_custom_localization' is not a valid rule identifier.

Complete output when running SwiftLint, including the stack trace and command used
$ swiftlint lint
Linting Swift files in current working directory
warning: 'non_custom_localization' is not a valid rule identifier
Valid rule identifiers:
anyobject_protocol
array_init
attributes
block_based_kvo
class_delegate_protocol
closing_brace
closure_body_length
closure_end_indentation
closure_parameter_position
closure_spacing
collection_alignment
colon
comma
comment_spacing
compiler_protocol_init
computed_accessors_order
conditional_returns_on_newline
contains_over_filter_count
contains_over_filter_is_empty
contains_over_first_not_nil
contains_over_range_nil_comparison
control_statement
convenience_type
custom_rules
cyclomatic_complexity
deployment_target
discarded_notification_center_observer
discouraged_direct_init
discouraged_object_literal
discouraged_optional_boolean
discouraged_optional_collection
duplicate_enum_cases
duplicate_imports
dynamic_inline
empty_collection_literal
empty_count
empty_enum_arguments
empty_parameters
empty_parentheses_with_trailing_closure
empty_string
empty_xctest_method
enum_case_associated_values_count
expiring_todo
explicit_acl
explicit_enum_raw_value
explicit_init
explicit_self
explicit_top_level_acl
explicit_type_interface
extension_access_modifier
fallthrough
fatal_error_message
file_header
file_length
file_name
file_name_no_space
file_types_order
first_where
flatmap_over_map_reduce
for_where
force_cast
force_try
force_unwrapping
function_body_length
function_default_parameter_at_end
function_parameter_count
generic_type_name
ibinspectable_in_extension
identical_operands
identifier_name
implicit_getter
implicit_return
implicitly_unwrapped_optional
inclusive_language
indentation_width
inert_defer
insecure_connection
is_disjoint
joined_default_parameter
large_tuple
last_where
leading_whitespace
legacy_cggeometry_functions
legacy_constant
legacy_constructor
legacy_hashing
legacy_multiple
legacy_nsgeometry_functions
legacy_random
let_var_whitespace
line_length
literal_expression_end_indentation
lower_acl_than_parent
mark
missing_docs
modifier_order
multiline_arguments
multiline_arguments_brackets
multiline_function_chains
multiline_literal_brackets
multiline_parameters
multiline_parameters_brackets
multiple_closures_with_trailing_closure
nesting
nimble_operator
no_extension_access_modifier
no_fallthrough_only
no_grouping_extension
no_space_in_method_call
notification_center_detachment
nslocalizedstring_key
nslocalizedstring_require_bundle
nsobject_prefer_isequal
number_separator
object_literal
opening_brace
operator_usage_whitespace
operator_whitespace
optional_enum_case_matching
orphaned_doc_comment
overridden_super_call
override_in_extension
pattern_matching_keywords
prefer_nimble
prefer_self_type_over_type_of_self
prefer_zero_over_explicit_init
prefixed_toplevel_constant
private_action
private_outlet
private_over_fileprivate
private_unit_test
prohibited_interface_builder
prohibited_super_call
protocol_property_accessors_order
quick_discouraged_call
quick_discouraged_focused_test
quick_discouraged_pending_test
raw_value_for_camel_cased_codable_enum
reduce_boolean
reduce_into
redundant_discardable_let
redundant_nil_coalescing
redundant_objc_attribute
redundant_optional_initialization
redundant_set_access_control
redundant_string_enum_value
redundant_type_annotation
redundant_void_return
required_deinit
required_enum_case
return_arrow_whitespace
shorthand_operator
single_test_class
sorted_first_last
sorted_imports
statement_position
static_operator
strict_fileprivate
strong_iboutlet
superfluous_disable_command
switch_case_alignment
switch_case_on_newline
syntactic_sugar
test_case_accessibility
todo
toggle_bool
trailing_closure
trailing_comma
trailing_newline
trailing_semicolon
trailing_whitespace
type_body_length
type_contents_order
type_name
unavailable_function
unneeded_break_in_switch
unneeded_parentheses_in_closure_argument
unowned_variable_capture
untyped_error_in_catch
unused_capture_list
unused_closure_parameter
unused_control_flow_label
unused_declaration
unused_enumerated
unused_import
unused_optional_binding
unused_setter_value
valid_ibinspectable
vertical_parameter_alignment
vertical_parameter_alignment_on_call
vertical_whitespace
vertical_whitespace_between_cases
vertical_whitespace_closing_braces
vertical_whitespace_opening_braces
void_return
weak_delegate
xct_specific_matcher
xctfail_message
yoda_condition
Linting 'XYZ-1.swift' (1/237)
<snip>
<snip>/Localization.swift:15:1: warning: Superfluous Disable Command Violation: 'non_custom_localization' is not a valid SwiftLint rule. Please remove it from the disable command. (superfluous_disable_command)
<snip>/Localization.swift:12:1: warning: Superfluous Disable Command Violation: 'non_custom_localization' is not a valid SwiftLint rule. Please remove it from the disable command. (superfluous_disable_command)
<snip>/Common.swift:48:1: warning: Superfluous Disable Command Violation: 'non_custom_localization' is not a valid SwiftLint rule. Please remove it from the disable command. (superfluous_disable_command)
<snip>
Linting 'XYZ-237.swift' (237/237)
Done linting! Found 4 violations, 0 serious in 237 files.

Environment

  • SwiftLint version 0.42.0
  • Installation method used: Homebrew
  • Paste your configuration file:
disabled_rules:
  # rules we actually want to disable
  - todo # We use todo's

  # rules we might keep, but that likely need fine-tuning if we do
  - line_length
  - file_length
  - identifier_name
  - function_parameter_count
  - type_body_length
  - nesting

  # rules that we want to use, possibly with fine-tuning
  - cyclomatic_complexity
  - function_body_length

opt_in_rules:
  - array_init
  - closure_spacing
  - collection_alignment
  - contains_over_first_not_nil
  - convenience_type
  - empty_string
  - first_where
  - identical_operands
  - last_where
  - legacy_random
  - sorted_first_last
  - sorted_imports
  - statement_position
  - switch_case_on_newline
  - toggle_bool
  - unused_import
  #- vertical_whitespace_closing_braces
  #- vertical_whitespace_opening_braces
  - yoda_condition

  # rules that should be enabled, when we have a moment
  # - empty_count # performance
  # - conditional_returns_on_newline # idiomatic
  # - lower_acl_than_parent
  # - modifier_order
  # - unneeded_parentheses_in_closure_argument
# Rule Fine-Tuning
force_cast: warning
force_try: warning

custom_rules:
  non_custom_localization:
    name: "Non Custom Localization"
    regex: "NSLocalizedString\\("
    message: "Use MBLocalizedString to make sure localization works"
    severity: warning

The main file .swiftlint.yml is at the project root, the nested file at Folder1/Folder2/Folder3/.swiftlint.yml with the following content:

disabled_rules:
  - non_custom_localization
  • Xcode version Xcode 12.2, Build version 12B45

No code directly triggers this, it's a general issue with the config file.


I found an existing already closed issue for this back in October 2018: #2441
Since this issue has appeared only recently without changes on my side, I'm assuming a recent change for Swiftlint broke something?

@dharnapahuja
Copy link

I am seeing same thing! I am not able to disable a custom rule that's mentioned in the parent config

@jpsim
Copy link
Collaborator

jpsim commented Feb 23, 2021

I'd be happy to look into this but I have a backlog of about ~400+ SwiftLint issues and PRs that I'm going through, so it would really help me if you could simplify this to the most minimal repro case, ideally a zip archive of a directory where I can just run swiftlint at the root and see the issue reproduce itself. That way I can focus my time on fixing the issue rather than recreating the conditions to produce it.

@fredpi
Copy link
Collaborator

fredpi commented Feb 23, 2021

This is probably a duplicate of #3472. I created a fix for that but it broke something else and had to be (temporarily) reverted (see #3503 (comment)).

In the coming days I will try to create a proper fix and will drop you a notice once it's done so that you can figure whether it also fixes your specific issue.

@fredpi fredpi self-assigned this Feb 23, 2021
@jpsim
Copy link
Collaborator

jpsim commented Feb 24, 2021

Thanks for that context, @fredpi !

@fredpi
Copy link
Collaborator

fredpi commented Feb 25, 2021

@tobiasjordan I believe this is probably fixed via #3538. Could you confirm this? (You can download the current master branch and run make install to install it as your local swiftlint)

@fredpi
Copy link
Collaborator

fredpi commented Feb 26, 2021

@tobiasjordan There's now also 0.43.0 Release Candidate 4 which includes the potential fix for this issue.

@fredpi fredpi removed their assignment Mar 3, 2021
@fredpi fredpi closed this as completed Jan 21, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants