Как использовать команду swiftlint и скрипт Xcode, когда файл .swiftlint.yml не находится в одной папке с project.xcodeproj? - PullRequest
0 голосов
/ 07 марта 2019

Я использую SwiftLint для управления стилем кода моего проекта, он работает нормально почти все время. Но я столкнулся с небольшой проблемой: когда файл .swiftlint.yml не находится в одной папке с файлом проекта '.xcodeproj', если я использую команду swiftlint autocorrect или сборку Xcode для использования SwiftLint , мне нужно изменить .swiftlint.yml каждый раз. Ниже приведены детали:

  1. Структура моего проекта, как показано ниже:
> SampleProject
>     ├── .swiftlint.yml
>     ├── SampleProject
>     │   ├── Frameworks
>     │   ├── Info.plist
>     │   ├── SampleProject
>     │   ├── SampleProject.xcodeproj
>     │   └── SampleProjectTests
>     ├── SampleProject.xcworkspace
>     ├── Configuration
>     ├── CommonFoundation
>     │   ├── CommonFoundation
>     │   ├── CommonFoundation.xcodeproj
>     │   └── CommonFoundationTests
>     ├── Gemfile
>     ├── Gemfile.lock
>     ├── Podfile
>     ├── Podfile.lock
>     ├── Pods
>     ├── README.md
>     ├── fastlane
>     └── release.sh

.swiftlint.yml в корневом пути, но SampleProject.xcodeproj в подпапке;

  1. Я установил SwiftLint через brew install swiftlint;
  2. Я добавил SwiftLint Script с кодом ниже в Xcode для проекта SampleProject.xcodeproj:

    if which swiftlint >/dev/null; then
    swiftlint --config ../.swiftlint.yml
    else
    echo "warning: SwiftLint not installed, 'brew install swiftlint' or download from https://github.com/realm/SwiftLint"
    fi
    

enter image description here

  1. .swiftlint.yml код, как показано ниже:

          disabled_rules: # rule identifiers to exclude from running
            - colon
            - comma
            - control_statement
            - line_length
            - type_body_length
            - function_body_length
            - cyclomatic_complexity
          opt_in_rules: # some rules are only opt-in
            - empty_count
          included: # paths to include during linting. `--path` is ignored if present.
              - ./SampleProject/Manager/Configs.swift
    
          excluded: # paths to ignore during linting. Takes precedence over `included`.
            - Carthage
            - Pods
          analyzer_rules: # Rules run by `swiftlint analyze` (experimental)
            - explicit_self
    
          force_cast: warning # implicitly
          force_try:
            severity: warning # explicitly
          type_body_length:
            - 300 # warning
            - 400 # error
          # or they can set both explicitly
          file_length:
            warning: 1000
            error: 1500
          type_name:
            min_length: 4 # only warning
            max_length: # warning and error
              warning: 40
              error: 50
            excluded: iPhone # excluded via string
          identifier_name:
            min_length: # only min_length
              error: 3 # only error
            excluded: # excluded via string array
              - i
              - j
              - id
              - GlobalAPIKey
          reporter: "xcode" # reporter type (xcode, json, csv, checkstyle, junit, html, emoji, sonarqube, markdown)
    
  2. Когда я собираю проект с Xcode с SwiftLint с файлом SampleProject/SampleProject/Manager/Configs.swift, мне нужно обновить элемент included в .swiftlint.yml, как показано ниже:

      included: # paths to include during linting. `--path` is ignored if present.
          - ./SampleProject/Manager/Configs.swift
    
  3. Когда я запускаю команду «автозамена swiftlint» с SwiftLint с файлом SampleProject/SampleProject/Manager/Configs.swift, мне нужно обновить элемент included в .swiftlint.yml, как показано ниже:

      included: # paths to include during linting. `--path` is ignored if present.
          - SampleProject/SampleProject/Manager/Configs.swift
    

Я хочу найти способ помочь в этом, не меняйте файл .swiftlint.yml, но команда 'автокоррекция swiftlint' и сборка Xcode отлично работают с SwiftLint.

...