File: FormattingRequests.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (141 lines) | stat: -rw-r--r-- 5,184 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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
//===----------------------------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//

/// Request to format an entire document.
///
/// Servers that provide formatting should set the`documentFormattingProvider` server capability.
///
/// - Parameters:
///   - textDocument: The document to format.
///   - options: Options to customize the formatting.
///
/// - Returns: An array of of text edits describing the formatting changes to the document, if any.
public struct DocumentFormattingRequest: TextDocumentRequest, Hashable {
  public static let method: String = "textDocument/formatting"
  public typealias Response = [TextEdit]?

  /// The document to format.
  public var textDocument: TextDocumentIdentifier

  /// Options to customize the formatting.
  public var options: FormattingOptions

  public init(textDocument: TextDocumentIdentifier, options: FormattingOptions) {
    self.textDocument = textDocument
    self.options = options
  }
}

/// Request to format a specified range within a document.
///
/// Servers that provide range formatting should set the`documentRangeFormattingProvider` server
/// capability.
///
/// - Parameters:
///   - textDocument: he document in which to perform formatting.
///   - range: The range to format within `textDocument`.
///   - options: Options to customize the formatting.
///
/// - Returns: An array of of text edits describing the formatting changes to the document, if any.
public struct DocumentRangeFormattingRequest: TextDocumentRequest, Hashable {
  public static let method: String = "textDocument/rangeFormatting"
  public typealias Response = [TextEdit]?

  /// The document in which to perform formatting.
  public var textDocument: TextDocumentIdentifier

  /// The range to format within `textDocument`.
  @CustomCodable<PositionRange>
  public var range: Range<Position>

  /// Options to customize the formatting.
  public var options: FormattingOptions

  public init(textDocument: TextDocumentIdentifier, range: Range<Position>, options: FormattingOptions) {
    self.textDocument = textDocument
    self.range = range
    self.options = options
  }
}

/// Request to format part of a document during typing.
///
/// While `Document[Range]Formatting` requests are appropriate for performing bulk formatting of a
/// document, on-type formatting is meant for providing lightweight formatting during typing. It
/// is triggered in response to trigger characters being typed.
///
/// Servers that provide range formatting should set the`documentOnTypeFormattingProvider` server
/// capability.
///
/// - Parameters:
///   - textDocument: he document in which to perform formatting.
///   - position: The position at which the request was sent.
///   - ch: The character that triggered the formatting.
///   - options: Options to customize the formatting.
///
/// - Returns: An array of of text edits describing the formatting changes to the document, if any.
public struct DocumentOnTypeFormattingRequest: TextDocumentRequest, Hashable {
  public static let method: String = "textDocument/onTypeFormatting"
  public typealias Response = [TextEdit]?

  /// The document in which to perform formatting.
  public var textDocument: TextDocumentIdentifier

  /// The position at which the request was sent, which is immediately after the trigger character.
  public var position: Position

  /// The character that triggered the formatting.
  public var ch: String

  /// Options to customize the formatting.
  public var options: FormattingOptions

  public init(textDocument: TextDocumentIdentifier, position: Position, ch: String, options: FormattingOptions) {
    self.textDocument = textDocument
    self.position = position
    self.ch = ch
    self.options = options
  }
}

/// Options to customize how document formatting requests are performed.
public struct FormattingOptions: Codable, Hashable, Sendable {

  /// The number of space characters in a tab.
  public var tabSize: Int

  /// Whether to use spaces instead of tabs.
  public var insertSpaces: Bool

  /// Trim trailing whitespace on a line.
  public var trimTrailingWhitespace: Bool?

  /// Insert a newline character at the end of the file if one does not exist.
  public var insertFinalNewline: Bool?

  /// Trim all newlines after the final newline at the end of the file.
  public var trimFinalNewlines: Bool?

  public init(
    tabSize: Int,
    insertSpaces: Bool,
    trimTrailingWhitespace: Bool? = nil,
    insertFinalNewline: Bool? = nil,
    trimFinalNewlines: Bool? = nil
  ) {
    self.tabSize = tabSize
    self.insertSpaces = insertSpaces
    self.trimTrailingWhitespace = trimTrailingWhitespace
    self.insertFinalNewline = insertFinalNewline
    self.trimFinalNewlines = trimFinalNewlines
  }
}