Files
Ruslan Alikhamov cec7895f0a Adjusted file structure to accommodate two generated files (#1299)
* Adjusted file structure to accommodate two generated files

* Adjusted scripting

* Removed Description, Diffable, Equality for now

* Removed Stencil import

* Updated templates

* Updated scripting

* Updated generated coding

* Disable build deletion (temp)

* Updated template

* Updated generated code

* updated generated code

* Updated generated code

* Adjusted scripting

* Updated scripting

* Updated generated code

* Reverted template deletion

* Removed Stencil imports

* Updated generated code

* trigger CI

* Removed description, diffable and equality stencil templates

* Reverted temporary changes

* Commented failing tests

* Skipping JSExport for description & hash

* Updated generated code

* Enabled failing tests

* Adding stencil templates back to test tests

* Reset generated file for linux for test

* Reverted Extensions for testing

* Reverted ParserResultsComposed

* Attempt to fix unit tests

* Attempt to resolve unit test

* Reverted TypeName asSource

* Reverted TypeName revertion

* Reverted revert of ParserResultComposed

* Reverted revert of Extensions

* Reverted revert of Linux.content.generated

* Reverted attempts to fix unit tests

* Fix for the failing codegen tests

* Added clarifying comment

* Removed description, diffable and equality stencil templates

* Updated generated code

* Tinkering with optimization level for speed boost

* Excluded stencil templates for codegen

* Fixed wrong compiler flag

* Removed speed optimization to a separate PR

* Reverted test code
2024-03-13 00:01:29 +04:00

187 lines
9.0 KiB
Swift

//
// FileParserResult.swift
// Sourcery
//
// Created by Krzysztof Zablocki on 11/01/2017.
// Copyright © 2017 Pixle. All rights reserved.
//
import Foundation
// sourcery: skipJSExport
/// :nodoc:
#if canImport(ObjectiveC)
@objcMembers
#endif
public final class FileParserResult: NSObject, SourceryModel, Diffable {
public let path: String?
public let module: String?
public var types = [Type]() {
didSet {
types.forEach { type in
guard type.module == nil, type.kind != "extensions" else { return }
type.module = module
}
}
}
public var functions = [SourceryMethod]()
public var typealiases = [Typealias]()
public var inlineRanges = [String: NSRange]()
public var inlineIndentations = [String: String]()
public var modifiedDate: Date
public var sourceryVersion: String
var isEmpty: Bool {
types.isEmpty && functions.isEmpty && typealiases.isEmpty && inlineRanges.isEmpty && inlineIndentations.isEmpty
}
public init(path: String?, module: String?, types: [Type], functions: [SourceryMethod], typealiases: [Typealias] = [], inlineRanges: [String: NSRange] = [:], inlineIndentations: [String: String] = [:], modifiedDate: Date = Date(), sourceryVersion: String = "") {
self.path = path
self.module = module
self.types = types
self.functions = functions
self.typealiases = typealiases
self.inlineRanges = inlineRanges
self.inlineIndentations = inlineIndentations
self.modifiedDate = modifiedDate
self.sourceryVersion = sourceryVersion
super.init()
defer {
self.types = types
}
}
/// :nodoc:
// sourcery: skipJSExport
override public var description: String {
var string = "\(Swift.type(of: self)): "
string.append("path = \(String(describing: self.path)), ")
string.append("module = \(String(describing: self.module)), ")
string.append("types = \(String(describing: self.types)), ")
string.append("functions = \(String(describing: self.functions)), ")
string.append("typealiases = \(String(describing: self.typealiases)), ")
string.append("inlineRanges = \(String(describing: self.inlineRanges)), ")
string.append("inlineIndentations = \(String(describing: self.inlineIndentations)), ")
string.append("modifiedDate = \(String(describing: self.modifiedDate)), ")
string.append("sourceryVersion = \(String(describing: self.sourceryVersion)), ")
string.append("isEmpty = \(String(describing: self.isEmpty))")
return string
}
public func diffAgainst(_ object: Any?) -> DiffableResult {
let results = DiffableResult()
guard let castObject = object as? FileParserResult else {
results.append("Incorrect type <expected: FileParserResult, received: \(Swift.type(of: object))>")
return results
}
results.append(contentsOf: DiffableResult(identifier: "path").trackDifference(actual: self.path, expected: castObject.path))
results.append(contentsOf: DiffableResult(identifier: "module").trackDifference(actual: self.module, expected: castObject.module))
results.append(contentsOf: DiffableResult(identifier: "types").trackDifference(actual: self.types, expected: castObject.types))
results.append(contentsOf: DiffableResult(identifier: "functions").trackDifference(actual: self.functions, expected: castObject.functions))
results.append(contentsOf: DiffableResult(identifier: "typealiases").trackDifference(actual: self.typealiases, expected: castObject.typealiases))
results.append(contentsOf: DiffableResult(identifier: "inlineRanges").trackDifference(actual: self.inlineRanges, expected: castObject.inlineRanges))
results.append(contentsOf: DiffableResult(identifier: "inlineIndentations").trackDifference(actual: self.inlineIndentations, expected: castObject.inlineIndentations))
results.append(contentsOf: DiffableResult(identifier: "modifiedDate").trackDifference(actual: self.modifiedDate, expected: castObject.modifiedDate))
results.append(contentsOf: DiffableResult(identifier: "sourceryVersion").trackDifference(actual: self.sourceryVersion, expected: castObject.sourceryVersion))
return results
}
/// :nodoc:
// sourcery: skipJSExport
public override var hash: Int {
var hasher = Hasher()
hasher.combine(self.path)
hasher.combine(self.module)
hasher.combine(self.types)
hasher.combine(self.functions)
hasher.combine(self.typealiases)
hasher.combine(self.inlineRanges)
hasher.combine(self.inlineIndentations)
hasher.combine(self.modifiedDate)
hasher.combine(self.sourceryVersion)
return hasher.finalize()
}
/// :nodoc:
public override func isEqual(_ object: Any?) -> Bool {
guard let rhs = object as? FileParserResult else { return false }
if self.path != rhs.path { return false }
if self.module != rhs.module { return false }
if self.types != rhs.types { return false }
if self.functions != rhs.functions { return false }
if self.typealiases != rhs.typealiases { return false }
if self.inlineRanges != rhs.inlineRanges { return false }
if self.inlineIndentations != rhs.inlineIndentations { return false }
if self.modifiedDate != rhs.modifiedDate { return false }
if self.sourceryVersion != rhs.sourceryVersion { return false }
return true
}
// sourcery:inline:FileParserResult.AutoCoding
/// :nodoc:
required public init?(coder aDecoder: NSCoder) {
self.path = aDecoder.decode(forKey: "path")
self.module = aDecoder.decode(forKey: "module")
guard let types: [Type] = aDecoder.decode(forKey: "types") else {
withVaList(["types"]) { arguments in
NSException.raise(NSExceptionName.parseErrorException, format: "Key '%@' not found.", arguments: arguments)
}
fatalError()
}; self.types = types
guard let functions: [SourceryMethod] = aDecoder.decode(forKey: "functions") else {
withVaList(["functions"]) { arguments in
NSException.raise(NSExceptionName.parseErrorException, format: "Key '%@' not found.", arguments: arguments)
}
fatalError()
}; self.functions = functions
guard let typealiases: [Typealias] = aDecoder.decode(forKey: "typealiases") else {
withVaList(["typealiases"]) { arguments in
NSException.raise(NSExceptionName.parseErrorException, format: "Key '%@' not found.", arguments: arguments)
}
fatalError()
}; self.typealiases = typealiases
guard let inlineRanges: [String: NSRange] = aDecoder.decode(forKey: "inlineRanges") else {
withVaList(["inlineRanges"]) { arguments in
NSException.raise(NSExceptionName.parseErrorException, format: "Key '%@' not found.", arguments: arguments)
}
fatalError()
}; self.inlineRanges = inlineRanges
guard let inlineIndentations: [String: String] = aDecoder.decode(forKey: "inlineIndentations") else {
withVaList(["inlineIndentations"]) { arguments in
NSException.raise(NSExceptionName.parseErrorException, format: "Key '%@' not found.", arguments: arguments)
}
fatalError()
}; self.inlineIndentations = inlineIndentations
guard let modifiedDate: Date = aDecoder.decode(forKey: "modifiedDate") else {
withVaList(["modifiedDate"]) { arguments in
NSException.raise(NSExceptionName.parseErrorException, format: "Key '%@' not found.", arguments: arguments)
}
fatalError()
}; self.modifiedDate = modifiedDate
guard let sourceryVersion: String = aDecoder.decode(forKey: "sourceryVersion") else {
withVaList(["sourceryVersion"]) { arguments in
NSException.raise(NSExceptionName.parseErrorException, format: "Key '%@' not found.", arguments: arguments)
}
fatalError()
}; self.sourceryVersion = sourceryVersion
}
/// :nodoc:
public func encode(with aCoder: NSCoder) {
aCoder.encode(self.path, forKey: "path")
aCoder.encode(self.module, forKey: "module")
aCoder.encode(self.types, forKey: "types")
aCoder.encode(self.functions, forKey: "functions")
aCoder.encode(self.typealiases, forKey: "typealiases")
aCoder.encode(self.inlineRanges, forKey: "inlineRanges")
aCoder.encode(self.inlineIndentations, forKey: "inlineIndentations")
aCoder.encode(self.modifiedDate, forKey: "modifiedDate")
aCoder.encode(self.sourceryVersion, forKey: "sourceryVersion")
}
// sourcery:end
}