-import Foundation
-import SourceKittenFramework
-
-public struct ValidIBInspectableRule: ASTRule, ConfigurationProviderRule {
+import SwiftSyntax
+
+public struct ValidIBInspectableRule: SwiftSyntaxRule, ConfigurationProviderRule {
     public var configuration = SeverityConfiguration(.warning)
-
-    private static let supportedTypes = Self.createSupportedTypes()
 
     public init() {}
 

        let expandToIncludeOptionals: (String) -> [String] = { [$0, $0 + "!", $0 + "?"] }

        // It seems that only reference types can be used as ImplicitlyUnwrappedOptional or Optional
        return referenceTypes.flatMap(expandToIncludeOptionals) + types + intTypes
    }
}

private extension SwiftLintFile {
    func isMutableProperty(_ dictionary: SourceKittenDictionary) -> Bool {
        if dictionary.setterAccessibility != nil {
            return true
        }

        if SwiftVersion.current >= .fiveDotTwo,
            let range = dictionary.byteRange.map(stringView.byteRangeToNSRange) {
            return hasSetToken(in: range)
        } else {
            return false
        }
    }

    private func hasSetToken(in range: NSRange?) -> Bool {
        return rangesAndTokens(matching: "\\bset\\b", range: range).contains { _, tokens in
            return tokens.count == 1 && tokens[0].kind == .keyword
        }
    }
}

                    }
                }
            }
            """),
            Example("""
            class Foo {
                @IBInspectable var borderColor: UIColor? = nil {
                    didSet {
                        updateAppearance()
                    }
                }
            }
            """)
        ],
        triggeringExamples: [
