realm / SwiftLint

A tool to enforce Swift style and conventions.
https://realm.github.io/SwiftLint
MIT License
18.59k stars 2.22k forks source link

Custom rule flagging wrong spot in the source file #3296

Closed rcritz closed 3 years ago

rcritz commented 4 years ago

New Issue Checklist

Describe the bug

Custom rule correctly detects a violation in the source file but flags line 1 rather than the actual violation.

Complete output when running SwiftLint, including the stack trace and command used
ace:bug critz$ swiftlint lint --config ~/com.raywenderlich.swiftlint.yml 
Loading configuration from '/Users/critz/com.raywenderlich.swiftlint.yml'
Linting Swift files at paths 
Linting 'bug.swift' (1/1)
/tmp/bug/bug.swift:1:6: warning: Array/Dictionary initializer Violation: Use explicit type annotation when initializing arrays and dictionaries (array_constructor)
Done linting! Found 1 violation, 0 serious in 1 file.

Environment

excluded:
  - Carthage
  - Pods
  - DerivedData

disabled_rules:
  - discarded_notification_center_observer
  - notification_center_detachment
  - orphaned_doc_comment
  - todo

opt_in_rules:
  - 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
  - force_unwrapping
  - implicitly_unwrapped_optional
  - indentation_width
  - last_where
  - legacy_random
  - literal_expression_end_indentation
  - multiline_arguments
  - multiline_function_chains
  - multiline_literal_brackets
  - multiline_parameters
  - multiline_parameters_brackets
  - operator_usage_whitespace
  - overridden_super_call
  - pattern_matching_keywords
  - prefer_self_type_over_type_of_self
  - redundant_nil_coalescing
  - redundant_type_annotation
  - strict_fileprivate
  - toggle_bool
  - trailing_closure
  - unneeded_parentheses_in_closure_argument
  - unused_import
  - vertical_whitespace_closing_braces
  - vertical_whitespace_opening_braces
  - yoda_condition

custom_rules:
  array_constructor:
    name: "Array/Dictionary initializer"
    regex: '[let,var] .* = (\[.*\]\(\))'
    capture_group: 0
    message: "Use explicit type annotation when initializing arrays and dictionaries"
    severity: warning

attributes:
  always_on_same_line:
    - "@IBSegueAction"
    - "@IBAction"
    - "@NSManaged"
    - "@objc"

force_cast: warning
force_try: warning
function_body_length:
    warning: 60

legacy_hashing: error

identifier_name:
  excluded:
    - i
    - id
    - x
    - y
    - z

indentation_width:
  indentation_width: 2

line_length:
  ignores_urls: true
  ignores_function_declarations: true
  ignores_comments: true

multiline_arguments:
  first_argument_location: next_line

private_over_fileprivate:
  validate_extensions: true

trailing_whitespace:
  ignores_empty_lines: false
  ignores_comments: true

vertical_whitespace:
  max_empty_lines: 2
import Foundation

func foo() {
  var bar = [Int]()
}

Flags the error on line 1 rather than line 4.

stale[bot] commented 3 years ago

This issue has been automatically marked as stale because it has not had any recent activity. Please comment to prevent this issue from being closed. Thank you for your contributions!

marcelofabri commented 3 years ago

You need to escape [ and ]. I suggest using something like https://rubular.com to validate your regex against several input examples.

stale[bot] commented 3 years ago

This issue has been automatically marked as stale because it has not had any recent activity. Please comment to prevent this issue from being closed. Thank you for your contributions!