Open kwridan opened 3 years ago
8aeb133fa0c2f0c6e6e8042b026c27cfa1c25b3b
Is your feature request related to a problem? Please describe.
Using
XCDiffCore
as library enables other tools and application to leverage xcdiff programatically to perform project comparisons and retrieve their results. This however is limited to textual results only rather than the structured results.e.g. The main entry point is
ProjectComparator
public protocol ProjectComparator { func compare(_ firstPath: Path, _ secondPath: Path, parameters: ComparatorParameters) throws -> Result }
This returns
Result
which exposes the results as a rawString
:public struct Result { public let success: Bool public let output: String }
Describe the solution you'd like
Expose another method or component that can return the underlying
ProjectCompareResult
(which is structured).One option could be to add another method on
ProjectComparator
:e.g.
structuredCompare()
public protocol ProjectComparator { func compare( _ firstPath: Path, _ secondPath: Path, parameters: ComparatorParameters ) throws -> Result func structuredCompare( _ firstPath: Path, _ secondPath: Path, parameters: ComparatorParameters ) throws -> ProjectCompareResult }
This however makes the API a little awkward as a
ProjectComparator
is obtained viaProjectComparatorFactory
which requires specifying the list of comparators along with aMode
which specifies the outputformat
that is not applicable when dealing with structured results.Another option could be extend
ProjectComparatorFactory
to return a new typeStructuredProjectComparator
, the factory however will not require specifyingMode
e.g.
public protocol StructuredProjectComparator { func compare( _ firstPath: Path, _ secondPath: Path, parameters: ComparatorParameters ) throws -> ProjectCompareResult } public final class ProjectComparatorFactory { public static func create( comparators: [ComparatorType] = .allAvailableComparators, mode: Mode = .default ) -> ProjectComparator { // ... } public static func createStructuredComparator( comparators: [ComparatorType] = .allAvailableComparators, verbose: Bool = false, differencesOnly: Bool = false ) -> StructuredProjectComparator { // ... } }
Describe alternatives you've considered
- An alternative could be to leverage json formatted results and manually re-create the
ProjectCompareResult
structure that is capable of decoding the raw json back into something more structured. This feels unnecessary seeing theProjectCompareResult
is already public (just notDecodable
).- Another could be to manually write a custom
StructuredProjectComparator
outside ofXCDiffCore
, this is a little challenging as there isn't any public mechanisms to create the built in comparators. Furthermore, requires clients to dealXCDiffCore
dependencies (XcodeProj
loading andPathKit
) to recreate the project comparator.
Is your feature request related to a problem? Please describe.
Using
XCDiffCore
as library enables other tools and application to leverage xcdiff programatically to perform project comparisons and retrieve their results. This however is limited to textual results only rather than the structured results.e.g. The main entry point is
ProjectComparator
This returns
Result
which exposes the results as a rawString
:Describe the solution you'd like
Expose another method or component that can return the underlying
ProjectCompareResult
(which is structured).One option could be to add another method on
ProjectComparator
:e.g.
structuredCompare()
This however makes the API a little awkward as a
ProjectComparator
is obtained viaProjectComparatorFactory
which requires specifying the list of comparators along with aMode
which specifies the outputformat
that is not applicable when dealing with structured results.Another option could be extend
ProjectComparatorFactory
to return a new typeStructuredProjectComparator
, the factory however will not require specifyingMode
e.g.
Describe alternatives you've considered
ProjectCompareResult
structure that is capable of decoding the raw json back into something more structured. This feels unnecessary seeing theProjectCompareResult
is already public (just notDecodable
).StructuredProjectComparator
outside ofXCDiffCore
, this is a little challenging as there isn't any public mechanisms to create the built in comparators. Furthermore, requires clients to dealXCDiffCore
dependencies (XcodeProj
loading andPathKit
) to recreate the project comparator.