From 8ae6b02525c4a2bb5440a34031b2668b512e8b37 Mon Sep 17 00:00:00 2001 From: Alex Hoppen Date: Thu, 3 Oct 2019 14:48:05 -0700 Subject: [PATCH] Add convenience methods to read the value of float and int literals --- .../SyntaxConvenienceMethods.swift | 25 +++++++++++++++++++ Tests/LinuxMain.swift | 1 + .../SyntaxConvenienceMethodsTests.swift | 22 ++++++++++++++++ utils/group.json | 3 ++- 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 Sources/SwiftSyntax/SyntaxConvenienceMethods.swift create mode 100644 Tests/SwiftSyntaxTest/SyntaxConvenienceMethodsTests.swift diff --git a/Sources/SwiftSyntax/SyntaxConvenienceMethods.swift b/Sources/SwiftSyntax/SyntaxConvenienceMethods.swift new file mode 100644 index 00000000000..fa3cd7e6def --- /dev/null +++ b/Sources/SwiftSyntax/SyntaxConvenienceMethods.swift @@ -0,0 +1,25 @@ +//===- SyntaxConvenienceMethods.swift - Convenience funcs for syntax nodes ===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2019 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// + +public extension FloatLiteralExprSyntax { + var floatingValue: Double { + // Parsing a floating literal as a Double should never fail + return Double(self.floatingDigits.text)! + } +} + +public extension IntegerLiteralExprSyntax { + var integerValue: Int { + // Parsing an integer literal as an Int should never fail + return Int(self.digits.text)! + } +} diff --git a/Tests/LinuxMain.swift b/Tests/LinuxMain.swift index 86ffff82fe0..7fab1d58bf6 100644 --- a/Tests/LinuxMain.swift +++ b/Tests/LinuxMain.swift @@ -18,6 +18,7 @@ XCTMain({ () -> [XCTestCaseEntry] in testCase(SyntaxTreeModifierTests.allTests), testCase(TriviaTests.allTests), testCase(CustomReflectableTests.allTests), + testCase(SyntaxConvenienceMethodsTestCase.allTests) ] return testCases }()) diff --git a/Tests/SwiftSyntaxTest/SyntaxConvenienceMethodsTests.swift b/Tests/SwiftSyntaxTest/SyntaxConvenienceMethodsTests.swift new file mode 100644 index 00000000000..293808bb745 --- /dev/null +++ b/Tests/SwiftSyntaxTest/SyntaxConvenienceMethodsTests.swift @@ -0,0 +1,22 @@ +import XCTest +import SwiftSyntax + +public class SyntaxConvenienceMethodsTestCase: XCTestCase { + + public static let allTests = [ + ("testFloatingValue", testFloatingValue), + ("testIntegerValue", testIntegerValue), + ] + + public func testFloatingValue() { + let digits = SyntaxFactory.makeFloatingLiteral("5.38") + let literalExpr = SyntaxFactory.makeFloatLiteralExpr(floatingDigits: digits) + XCTAssertEqual(literalExpr.floatingValue, 5.38) + } + + public func testIntegerValue() { + let digits = SyntaxFactory.makeIntegerLiteral("42") + let literalExpr = SyntaxFactory.makeIntegerLiteralExpr(digits: digits) + XCTAssertEqual(literalExpr.integerValue, 42) + } +} diff --git a/utils/group.json b/utils/group.json index c2cccfb4c2c..2075ab5a184 100644 --- a/utils/group.json +++ b/utils/group.json @@ -10,6 +10,7 @@ "SyntaxCollections.swift", "SourcePresence.swift", "SyntaxChildren.swift", + "SyntaxConvenienceMethods.swift", ], "Utils": [ "SyntaxBuilders.swift", @@ -39,4 +40,4 @@ "Internal": [ "AtomicCounter.swift", ] -} \ No newline at end of file +}