Skip to content

Commit

Permalink
Rename Parser.any(of:) to Parser.one(of:)
Browse files Browse the repository at this point in the history
  • Loading branch information
lee-ukjeong committed Dec 15, 2023
1 parent ca0e8b1 commit ead8cca
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 17 deletions.
6 changes: 3 additions & 3 deletions Sources/Strix/Parsers/NumberParsers.swift
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ private struct NumberLiteralParserGenerator {
}
parsers.append(.just(.none))

return .any(of: parsers)
return .one(of: parsers)
}

private var classification: Parser<NumberLiteral.Classification> {
Expand All @@ -215,7 +215,7 @@ private struct NumberLiteralParserGenerator {
}
parsers.append(.just(.finite))

return .any(of: parsers)
return .one(of: parsers)
}

private var notation: Parser<NumberLiteral.Notation> {
Expand All @@ -232,7 +232,7 @@ private struct NumberLiteralParserGenerator {
}
parsers.append(.just(.decimal))

return .any(of: parsers)
return .one(of: parsers)
}

private func integerPart(notation: NumberLiteral.Notation) -> Parser<String> {
Expand Down
9 changes: 7 additions & 2 deletions Sources/Strix/Parsers/PrimitiveParsers.swift
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,9 @@ extension Parser {
}
}

/// The parser `any(of: parsers)` is an optimized implementation of `p1 <|> p2 <|> ... <|> pn`,
/// The parser `one(of: parsers)` is an optimized implementation of `p1 <|> p2 <|> ... <|> pn`,
/// where `p1` ... `pn` are the parsers in the sequence `parsers`.
public static func any<S: Sequence>(of parsers: S) -> Parser<T> where S.Element == Parser<T> {
public static func one<S: Sequence>(of parsers: S) -> Parser<T> where S.Element == Parser<T> {
return Parser { state in
var errors: [ParseError] = []

Expand All @@ -140,6 +140,11 @@ extension Parser {
}
}

@available(*, deprecated, renamed: "one(of:)")
public static func any<S: Sequence>(of parsers: S) -> Parser<T> where S.Element == Parser<T> {
return one(of: parsers)
}

/// The parser `optional(p)` parses an optional occurrence of `p` as an option value.
public static func optional<U>(_ p: Parser<U>) -> Parser<T> where T == U? {
return p.map({ Optional($0) }) <|> .just(nil)
Expand Down
2 changes: 1 addition & 1 deletion Sources/StrixParsers/ASCIIPlistParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ private struct ASCIIPlistParserGenerator {
}

var plist: Parser<ASCIIPlist> {
let anyNode = Parser.any(of: [dictionaryNode, arrayNode, stringNode, dataNode])
let anyNode = Parser.one(of: [dictionaryNode, arrayNode, stringNode, dataNode])
recursivePlistGenerator.subject = manyComment *> anyNode <* ws <* manyComment
return recursivePlistGenerator.make()
}
Expand Down
2 changes: 1 addition & 1 deletion Sources/StrixParsers/Calculator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class Calculator {

private struct TokenizerGenerator {
var tokenizer: Parser<Token> {
return ws *> .any(of: [number, name, singleOperator, end])
return ws *> .one(of: [number, name, singleOperator, end])
}

private var ws: Parser<[Character]> {
Expand Down
4 changes: 2 additions & 2 deletions Sources/StrixParsers/FormatSpecifierParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ private struct FormatSpecifierParserGenerator {
return .string(length.rawValue) *> .just(length)
}
let label = "any string in [\(Length.allCases.map(\.rawValue).joined(separator: ", "))]"
return Parser.any(of: lengthParsers) <?> label
return Parser.one(of: lengthParsers) <?> label
}()

private let conversion: Parser<Conversion> = {
Expand All @@ -91,7 +91,7 @@ private struct FormatSpecifierParserGenerator {
}()

private let variableName: Parser<String> = {
let variableCharacters = Parser.any(of: [.asciiLetter, .decimalDigit, .character("_")])
let variableCharacters = Parser.one(of: [.asciiLetter, .decimalDigit, .character("_")])
return .skipped(by: .many(variableCharacters, minCount: 1)) <* .character("@")
}()
}
Expand Down
2 changes: 1 addition & 1 deletion Sources/StrixParsers/JSONParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ extension Parser where T == JSON {
private struct JSONParserGenerator {
var json: Parser<JSON> {
return .recursive { placeholder in
return .any(of: [
return .one(of: [
dictionaryJSON(json: placeholder), arrayJSON(json: placeholder),
stringJSON, numberJSON, trueJSON, falseJSON, nullJSON
])
Expand Down
14 changes: 7 additions & 7 deletions Tests/StrixTests/Parsers/PrimitiveParsersTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -223,23 +223,23 @@ final class PrimitiveParsersTests: XCTestCase {
XCTAssertEqual(reply.errors, [.generic(message: "Invalid input")])
}

// MARK: - anyOf
// MARK: - oneOf

func test_anyOf_returnFirstSuccess() {
func test_oneOf_returnFirstSuccess() {
// Given
let p1: Parser<Int> = .fail(message: "Fail 1")
let p2: Parser<Int> = .just(2)
let p3: Parser<Int> = .just(3)

// When
let p: Parser<Int> = .any(of: [p1, p2, p3])
let p: Parser<Int> = .one(of: [p1, p2, p3])
let reply = p.parse(ParserState(stream: "Input"))

// Then
XCTAssertEqual(reply.result.value, 2)
}

func test_anyOf_failWithChange_returnFailure() {
func test_oneOf_failWithChange_returnFailure() {
// Given
let p1: Parser<Int> = .fail(message: "Fail 1")
let p2: Parser<Int> = Parser { state in
Expand All @@ -249,21 +249,21 @@ final class PrimitiveParsersTests: XCTestCase {
let p3: Parser<Int> = .just(3)

// When
let p: Parser<Int> = .any(of: [p1, p2, p3])
let p: Parser<Int> = .one(of: [p1, p2, p3])
let reply = p.parse(ParserState(stream: "Input"))

// Then
XCTAssert(reply.result.isFailure)
}

func test_anyOf_failWithoutChange_mergeErrors() {
func test_oneOf_failWithoutChange_mergeErrors() {
// Given
let p1: Parser<Int> = .fail(message: "Fail 1")
let p2: Parser<Int> = .fail(message: "Fail 2")
let p3: Parser<Int> = .fail(message: "Fail 3")

// When
let p: Parser<Int> = .any(of: [p1, p2, p3])
let p: Parser<Int> = .one(of: [p1, p2, p3])
let reply = p.parse(ParserState(stream: "Input"))

// Then
Expand Down

0 comments on commit ead8cca

Please sign in to comment.