File Types Order
Specifies how the types within a file should be ordered.
- Identifier: file_types_order
- Enabled by default: No
- Supports autocorrection: No
- Kind: style
- Analyzer rule: No
- Minimum Swift compiler version: 5.0.0
- Default configuration:
Key Value severity warning order [[supporting_type], [main_type], [extension], [preview_provider], [library_content_provider]] 
Non Triggering Examples
// Supporting Types
protocol TestViewControllerDelegate {
    func didPressTrackedButton()
}
// Main Type
class TestViewController: UIViewController {
    // Type Aliases
    typealias CompletionHandler = ((TestEnum) -> Void)
    // Subtypes
    class TestClass {
        // 10 lines
    }
    struct TestStruct {
        // 3 lines
    }
    enum TestEnum {
        // 5 lines
    }
    // Stored Type Properties
    static let cellIdentifier: String = "AmazingCell"
    // Stored Instance Properties
    var shouldLayoutView1: Bool!
    weak var delegate: TestViewControllerDelegate?
    private var hasLayoutedView1: Bool = false
    private var hasLayoutedView2: Bool = false
    // Computed Instance Properties
    private var hasAnyLayoutedView: Bool {
         return hasLayoutedView1 || hasLayoutedView2
    }
    // IBOutlets
    @IBOutlet private var view1: UIView!
    @IBOutlet private var view2: UIView!
    // Initializers
    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    // Type Methods
    static func makeViewController() -> TestViewController {
        // some code
    }
    // Life-Cycle Methods
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
    }
    // IBActions
    @IBAction func goNextButtonPressed() {
        goToNextVc()
        delegate?.didPressTrackedButton()
    }
    @objc
    func goToRandomVcButtonPressed() {
        goToRandomVc()
    }
    // MARK: Other Methods
    func goToNextVc() { /* TODO */ }
    func goToInfoVc() { /* TODO */ }
    func goToRandomVc() {
        let viewCtrl = getRandomVc()
        present(viewCtrl, animated: true)
    }
    private func getRandomVc() -> UIViewController { return UIViewController() }
    // Subscripts
    subscript(_ someIndexThatIsNotEvenUsed: Int) -> String {
        get {
            return "This is just a test"
        }
        set {
            log.warning("Just a test", newValue)
        }
    }
}
// Extensions
extension TestViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
}
// Only extensions
extension Foo {}
extension Bar {
}
// Main Type
struct ContentView: View {
    var body: some View {
        Text("Hello, World!")
    }
}
// Preview Provider
struct ContentView_Previews: PreviewProvider {
    static var previews: some View { ContentView() }
}
// Library Content Provider
struct ContentView_LibraryContent: LibraryContentProvider {
    var views: [LibraryItem] {
        LibraryItem(ContentView())
    }
}
Triggering Examples
↓class TestViewController: UIViewController {}
// Supporting Types
protocol TestViewControllerDelegate {
    func didPressTrackedButton()
}
// Extensions
↓extension TestViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
}
class TestViewController: UIViewController {}
// Supporting Types
protocol TestViewControllerDelegate {
    func didPressTrackedButton()
}
↓class TestViewController: UIViewController {}
// Supporting Types
protocol TestViewControllerDelegate {
    func didPressTrackedButton()
}
// Supporting Types
protocol TestViewControllerDelegate {
    func didPressTrackedButton()
}
// Extensions
↓extension TestViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
}
class TestViewController: UIViewController {}
// Extensions
extension TestViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
}
// Preview Provider
↓struct ContentView_Previews: PreviewProvider {
    static var previews: some View { ContentView() }
}
// Main Type
struct ContentView: View {
    var body: some View {
        Text("Hello, World!")
    }
}
// Library Content Provider
↓struct ContentView_LibraryContent: LibraryContentProvider {
    var views: [LibraryItem] {
        LibraryItem(ContentView())
    }
}
// Main Type
struct ContentView: View {
    var body: some View {
        Text("Hello, World!")
    }
}
 View on GitHub
            View on GitHub
           Install in Dash
            Install in Dash
          