Skip to content

Commit

Permalink
Update version of SwiftSyntax to xcode11 beta
Browse files Browse the repository at this point in the history
  • Loading branch information
kitasuke committed Jun 11, 2019
1 parent 8e9f4b0 commit de0d4a1
Show file tree
Hide file tree
Showing 8 changed files with 36 additions and 26 deletions.
10 changes: 5 additions & 5 deletions Package.resolved
Expand Up @@ -15,8 +15,8 @@
"repositoryURL": "https://github.com/JohnSundell/Files.git",
"state": {
"branch": null,
"revision": "a84615f4558151fab52ac38df697ce2442991f93",
"version": "2.3.0"
"revision": "92b57bea0e737e7d92b5ff281f46ec2b59faf91c",
"version": "3.1.0"
}
},
{
Expand Down Expand Up @@ -50,9 +50,9 @@
"package": "SwiftSyntax",
"repositoryURL": "https://github.com/apple/swift-syntax.git",
"state": {
"branch": null,
"revision": "43aa4a19b8105a803d8149ad2a86aa53a77efef3",
"version": "0.50000.0"
"branch": "xcode11-beta1",
"revision": "fdcbd4bfea2e833467e16d7962c4110c14382b56",
"version": null
}
}
]
Expand Down
4 changes: 2 additions & 2 deletions Package.swift
Expand Up @@ -7,9 +7,9 @@ let package = Package(
name: "SwiftConst",
dependencies: [
// Dependencies declare other packages that this package depends on.
.package(url: "https://github.com/apple/swift-syntax.git", .exact("0.50000.0")),
.package(url: "https://github.com/apple/swift-syntax.git", .revision("xcode11-beta1")),
.package(url: "https://github.com/Carthage/Commandant.git", from: "0.15.0"),
.package(url: "https://github.com/JohnSundell/Files.git", from: "2.3.0")
.package(url: "https://github.com/JohnSundell/Files.git", from: "3.1.0")
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
Expand Down
7 changes: 5 additions & 2 deletions Sources/SwiftConstCore/Detectors/DuplicationDetector.swift
Expand Up @@ -10,15 +10,18 @@ import SwiftSyntax

public struct DuplicationDetector {

let filePath: String
let syntax: SourceFileSyntax

public init(syntax: SourceFileSyntax) {
public init(filePath: String, syntax: SourceFileSyntax) {
self.filePath = filePath
self.syntax = syntax
}

public func detect() -> [FileString] {
let dataStore = DataStore()
syntax.walk(StringVisitor(dataStore: dataStore))
var visitor = StringVisitor(filePath: filePath, syntax: syntax, dataStore: dataStore)
syntax.walk(&visitor)
return filter(dataStore.fileStrings)
}

Expand Down
2 changes: 1 addition & 1 deletion Sources/SwiftConstCore/SourceFile/SourceFileParser.swift
Expand Up @@ -17,6 +17,6 @@ public class SourceFileParser {
}

public func parse() throws -> SourceFileSyntax {
return try SyntaxTreeParser.parse(pathURL)
return try SyntaxParser.parse(pathURL)
}
}
28 changes: 17 additions & 11 deletions Sources/SwiftConstCore/Visitors/StringVisitor.swift
Expand Up @@ -8,38 +8,44 @@
import Foundation
import SwiftSyntax

public final class StringVisitor: SyntaxVisitor {
public struct StringVisitor: SyntaxVisitor {

let filePath: String
let syntax: SourceFileSyntax
var dataStore: DataStoreType

public init(dataStore: DataStoreType) {
public init(filePath: String, syntax: SourceFileSyntax, dataStore: DataStoreType) {
self.filePath = filePath
self.syntax = syntax
self.dataStore = dataStore
}

public override func visit(_ node: StringSegmentSyntax) -> SyntaxVisitorContinueKind {
public mutating func visit(_ node: StringSegmentSyntax) -> SyntaxVisitorContinueKind {
let value = node.content.text
.trimmingCharacters(in: .whitespacesAndNewlines)
guard !value.isEmpty else {
return .skipChildren
}
let trivia = node.position
let stringLiteral = FileString(value: value, line: trivia.line, column: trivia.column)

let sourceRange = node.sourceRange(converter: SourceLocationConverter(file: filePath, tree: syntax))
let stringLiteral = FileString(value: value, line: sourceRange.start.line ?? 0, column: sourceRange.start.column ?? 0)
dataStore.fileStrings.append(stringLiteral)
return .visitChildren

return .skipChildren
}

public override func visit(_ node: StringLiteralExprSyntax) -> SyntaxVisitorContinueKind {
public mutating func visit(_ node: StringLiteralExprSyntax) -> SyntaxVisitorContinueKind {
// ignore empty string. e.g. "\"foo\"" or "\"\"\"\n bar\"\"\""
// TODO: "\"" is unexpectedly ignored for now
let value = node.stringLiteral.text
.trimmingCharacters(in: CharacterSet(charactersIn: "\"").union(.whitespacesAndNewlines))
guard !value.isEmpty else {
return .skipChildren
return .skipChildren
}

let trivia = node.position
let stringLiteral = FileString(value: value, line: trivia.line, column: trivia.column)
let sourceRange = node.sourceRange(converter: SourceLocationConverter(file: filePath, tree: syntax))
let stringLiteral = FileString(value: value, line: sourceRange.start.line ?? 0, column: sourceRange.start.column ?? 0)
dataStore.fileStrings.append(stringLiteral)
return .visitChildren
return .skipChildren
}
}
2 changes: 1 addition & 1 deletion Sources/swiftconst/Commands/Run.swift
Expand Up @@ -26,7 +26,7 @@ struct RunCommand: CommandProtocol {
let duplicatedStrings: [DuplicatedString] = try scanner.files.reduce(into: []) { result, file in
let parser = SourceFileParser(pathString: file.path)
let syntax = try parser.parse()
let detector = DuplicationDetector(syntax: syntax)
let detector = DuplicationDetector(filePath: file.path ,syntax: syntax)
let strings = detector.detect().map { DuplicatedString(filePath: file.path, fileString: $0) }

result.append(contentsOf: strings)
Expand Down
Expand Up @@ -35,8 +35,8 @@ struct A {
}
"""
let url = createSourceFile(from: input)
let syntax = try! SyntaxTreeParser.parse(url)
let result = DuplicationDetector(syntax: syntax).detect()
let syntax = try! SyntaxParser.parse(url)
let result = DuplicationDetector(filePath: "", syntax: syntax).detect()

XCTAssertEqual(result, [
.init(value: "aaa", line: 2, column: 15),
Expand Down
5 changes: 3 additions & 2 deletions Tests/SwiftConstCoreTests/Visitors/StringVisitorTests.swift
Expand Up @@ -33,10 +33,11 @@ struct A {
"""

let url = createSourceFile(from: input)
let syntax = try! SyntaxTreeParser.parse(url)
let syntax = try! SyntaxParser.parse(url)

let dataStore: DataStoreType = MockDataStore()
syntax.walk(StringVisitor(dataStore: dataStore))
var visitor = StringVisitor(filePath: "", syntax: syntax, dataStore: dataStore)
syntax.walk(&visitor)

XCTAssertEqual(dataStore.fileStrings, [
.init(value: "ddd", line: 2, column: 15),
Expand Down

0 comments on commit de0d4a1

Please sign in to comment.