Files
sourcekit-lsp/Sources/SwiftSourceKitPlugin/CodeCompletion/CompletionOptions.swift
Alex Hoppen 5709e1a864 Add a SourceKit plugin to handle code completion requests
This adds a sourcekitd plugin that drives the code completion requests. It also includes a `CompletionScoring` module that’s used to rank code completion results based on their contextual match, allowing us to show more relevant code completion results at the top.
2025-01-03 14:21:54 +01:00

57 lines
2.1 KiB
Swift

//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2024 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
//
//===----------------------------------------------------------------------===//
struct CompletionOptions {
private static let defaultMaxResults: Int = 200
/// Whether the label and type name in the code completion result should be annotated XML or plain text.
let annotateResults: Bool
/// Whether object literals should be included in the code completion results.
let includeObjectLiterals: Bool
/// Whether initializer calls should be included in top-level completions.
let addInitsToTopLevel: Bool
/// If a function has defaulted arguments, whether we should produce two results (one without any defaulted arguments
/// and one with all defaulted arguments) or only one (with all defaulted arguments).
let addCallWithNoDefaultArgs: Bool
/// Whether to include the semantic components computed by completion sorting in the results.
let includeSemanticComponents: Bool
init(
annotateResults: Bool = false,
includeObjectLiterals: Bool = false,
addInitsToTopLevel: Bool = false,
addCallWithNoDefaultArgs: Bool = true,
includeSemanticComponents: Bool = false
) {
self.annotateResults = annotateResults
self.includeObjectLiterals = includeObjectLiterals
self.addInitsToTopLevel = addInitsToTopLevel
self.addCallWithNoDefaultArgs = addCallWithNoDefaultArgs
self.includeSemanticComponents = includeSemanticComponents
}
//// The maximum number of results we should return if the client requested `input` results.
static func maxResults(input: Int?) -> Int {
guard let maxResults = input, maxResults != 0 else {
return defaultMaxResults
}
if maxResults < 0 {
return Int.max // unlimited
}
return maxResults
}
}