File: TokenSyntaxAdditions.swift

package info (click to toggle)
swiftlang 6.2.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,856,264 kB
  • sloc: cpp: 9,995,718; ansic: 2,234,019; asm: 1,092,167; python: 313,940; objc: 82,726; f90: 80,126; lisp: 38,373; pascal: 25,580; sh: 20,378; ml: 5,058; perl: 4,751; makefile: 4,725; awk: 3,535; javascript: 3,018; xml: 918; fortran: 664; cs: 573; ruby: 396
file content (55 lines) | stat: -rw-r--r-- 1,895 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2023 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 Swift project authors
//

import SwiftParser
import SwiftSyntax

extension TokenSyntax {
  /// A tuple containing the text of this instance with enclosing backticks
  /// removed and whether or not they were removed.
  private var _textWithoutBackticks: (String, backticksRemoved: Bool) {
    let text = text
    if case .identifier = tokenKind, text.first == "`" && text.last == "`" && text.count >= 2 {
      return (String(text.dropFirst().dropLast()), true)
    }

    return (text, false)
  }

  /// The text of this instance with all backticks removed.
  ///
  /// - Bug: This property works around the presence of backticks in `text.`
  ///   ([swift-syntax-#1936](https://github.com/swiftlang/swift-syntax/issues/1936))
  var textWithoutBackticks: String {
    _textWithoutBackticks.0
  }

  /// The raw identifier, not including enclosing backticks, represented by this
  /// token, or `nil` if it does not represent one.
  var rawIdentifier: String? {
    let (textWithoutBackticks, backticksRemoved) = _textWithoutBackticks
    if backticksRemoved, !textWithoutBackticks.isValidSwiftIdentifier(for: .memberAccess) {
      return textWithoutBackticks
    }

    return nil
  }
}

/// The `static` keyword, if `typeName` is not `nil`.
///
/// - Parameters:
///   - typeName: The name of the type containing the macro being expanded.
///
/// - Returns: A token representing the `static` keyword, or one representing
///   nothing if `typeName` is `nil`.
func staticKeyword(for typeName: TypeSyntax?) -> TokenSyntax {
  (typeName != nil) ? .keyword(.static) : .unknown("")
}