Files
sourcekit-lsp/Sources/SourceKitD/sourcekitd_functions.swift
Ahmed Elrefaey 1982798b5d Fetch full documentation in code completion (#2207)
When resolving documentation for code completion items, we fetch full
documentation through the newly added
`swiftide_completion_item_get_doc_full_copy` SourceKitD function, if not
found we fallback to brief documentation as before using
`swiftide_completion_item_get_doc_brief`.

> [!NOTE]
> Unlike brief documentation, SourceKitD doesn't cache full
documentation for completion results to avoid bloating memory with a lot
of large strings.
>
> As of now, SourceKit-LSP doesn't cache completion item documentation
either, should we introduce a new full documentation cache (e.g. using
`LRUCache`)?
2025-09-04 19:42:37 +01:00

289 lines
19 KiB
Swift

//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2020 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
//
//===----------------------------------------------------------------------===//
import Csourcekitd
extension sourcekitd_api_functions_t {
package init(_ sourcekitd: DLHandle) throws {
func loadRequired<T>(_ symbol: String) throws -> T {
guard let sym: T = dlsym(sourcekitd, symbol: symbol) else {
throw SKDError.missingRequiredSymbol(symbol)
}
return sym
}
func loadOptional<T>(_ symbol: String) -> T? {
return dlsym(sourcekitd, symbol: symbol)
}
self.init(
initialize: try loadRequired("sourcekitd_initialize"),
shutdown: try loadRequired("sourcekitd_shutdown"),
register_plugin_path: loadOptional("sourcekitd_register_plugin_path"),
uid_get_from_cstr: try loadRequired("sourcekitd_uid_get_from_cstr"),
uid_get_from_buf: try loadRequired("sourcekitd_uid_get_from_buf"),
uid_get_length: try loadRequired("sourcekitd_uid_get_length"),
uid_get_string_ptr: try loadRequired("sourcekitd_uid_get_string_ptr"),
request_retain: try loadRequired("sourcekitd_request_retain"),
request_release: try loadRequired("sourcekitd_request_release"),
request_dictionary_create: try loadRequired("sourcekitd_request_dictionary_create"),
request_dictionary_set_value: try loadRequired("sourcekitd_request_dictionary_set_value"),
request_dictionary_set_string: try loadRequired("sourcekitd_request_dictionary_set_string"),
request_dictionary_set_stringbuf: try loadRequired("sourcekitd_request_dictionary_set_stringbuf"),
request_dictionary_set_int64: try loadRequired("sourcekitd_request_dictionary_set_int64"),
request_dictionary_set_uid: try loadRequired("sourcekitd_request_dictionary_set_uid"),
request_array_create: try loadRequired("sourcekitd_request_array_create"),
request_array_set_value: try loadRequired("sourcekitd_request_array_set_value"),
request_array_set_string: try loadRequired("sourcekitd_request_array_set_string"),
request_array_set_stringbuf: try loadRequired("sourcekitd_request_array_set_stringbuf"),
request_array_set_int64: try loadRequired("sourcekitd_request_array_set_int64"),
request_array_set_uid: try loadRequired("sourcekitd_request_array_set_uid"),
request_int64_create: try loadRequired("sourcekitd_request_int64_create"),
request_string_create: try loadRequired("sourcekitd_request_string_create"),
request_uid_create: try loadRequired("sourcekitd_request_uid_create"),
request_create_from_yaml: try loadRequired("sourcekitd_request_create_from_yaml"),
request_description_dump: try loadRequired("sourcekitd_request_description_dump"),
request_description_copy: try loadRequired("sourcekitd_request_description_copy"),
response_dispose: try loadRequired("sourcekitd_response_dispose"),
response_is_error: try loadRequired("sourcekitd_response_is_error"),
response_error_get_kind: try loadRequired("sourcekitd_response_error_get_kind"),
response_error_get_description: try loadRequired("sourcekitd_response_error_get_description"),
response_get_value: try loadRequired("sourcekitd_response_get_value"),
variant_get_type: try loadRequired("sourcekitd_variant_get_type"),
variant_dictionary_get_value: try loadRequired("sourcekitd_variant_dictionary_get_value"),
variant_dictionary_get_string: try loadRequired("sourcekitd_variant_dictionary_get_string"),
variant_dictionary_get_int64: try loadRequired("sourcekitd_variant_dictionary_get_int64"),
variant_dictionary_get_bool: try loadRequired("sourcekitd_variant_dictionary_get_bool"),
variant_dictionary_get_uid: try loadRequired("sourcekitd_variant_dictionary_get_uid"),
variant_array_get_count: try loadRequired("sourcekitd_variant_array_get_count"),
variant_array_get_value: try loadRequired("sourcekitd_variant_array_get_value"),
variant_array_get_string: try loadRequired("sourcekitd_variant_array_get_string"),
variant_array_get_int64: try loadRequired("sourcekitd_variant_array_get_int64"),
variant_array_get_bool: try loadRequired("sourcekitd_variant_array_get_bool"),
variant_array_get_uid: try loadRequired("sourcekitd_variant_array_get_uid"),
variant_int64_get_value: try loadRequired("sourcekitd_variant_int64_get_value"),
variant_bool_get_value: try loadRequired("sourcekitd_variant_bool_get_value"),
variant_double_get_value: loadOptional("sourcekitd_variant_double_get_value"),
variant_string_get_length: try loadRequired("sourcekitd_variant_string_get_length"),
variant_string_get_ptr: try loadRequired("sourcekitd_variant_string_get_ptr"),
variant_data_get_size: loadOptional("sourcekitd_variant_data_get_size"),
variant_data_get_ptr: loadOptional("sourcekitd_variant_data_get_ptr"),
variant_uid_get_value: try loadRequired("sourcekitd_variant_uid_get_value"),
response_description_dump: try loadRequired("sourcekitd_response_description_dump"),
response_description_dump_filedesc: try loadRequired("sourcekitd_response_description_dump_filedesc"),
response_description_copy: try loadRequired("sourcekitd_response_description_copy"),
variant_description_dump: try loadRequired("sourcekitd_variant_description_dump"),
variant_description_dump_filedesc: try loadRequired("sourcekitd_variant_description_dump_filedesc"),
variant_description_copy: try loadRequired("sourcekitd_variant_description_copy"),
send_request_sync: try loadRequired("sourcekitd_send_request_sync"),
send_request: try loadRequired("sourcekitd_send_request"),
cancel_request: try loadRequired("sourcekitd_cancel_request"),
set_notification_handler: try loadRequired("sourcekitd_set_notification_handler"),
set_uid_handlers: try loadRequired("sourcekitd_set_uid_handlers")
)
}
}
extension sourcekitd_ide_api_functions_t {
package init(_ sourcekitd: DLHandle) throws {
func loadRequired<T>(_ symbol: String) throws -> T {
guard let sym: T = dlsym(sourcekitd, symbol: symbol) else {
throw SKDError.missingRequiredSymbol(symbol)
}
return sym
}
func loadOptional<T>(_ symbol: String) -> T? {
return dlsym(sourcekitd, symbol: symbol)
}
self.init(
connection_create_with_inspection_instance: try loadRequired(
"swiftide_connection_create_with_inspection_instance"
),
connection_dispose: try loadRequired("swiftide_connection_dispose"),
connection_mark_cached_compiler_instance_should_be_invalidated: try loadRequired(
"swiftide_connection_mark_cached_compiler_instance_should_be_invalidated"
),
set_file_contents: try loadRequired("swiftide_set_file_contents"),
cancel_request: try loadRequired("swiftide_cancel_request"),
completion_request_create: try loadRequired("swiftide_completion_request_create"),
completion_request_dispose: try loadRequired("swiftide_completion_request_dispose"),
completion_request_set_annotate_result: try loadRequired("swiftide_completion_request_set_annotate_result"),
completion_request_set_include_objectliterals: try loadRequired(
"swiftide_completion_request_set_include_objectliterals"
),
completion_request_set_add_inits_to_top_level: try loadRequired(
"swiftide_completion_request_set_add_inits_to_top_level"
),
completion_request_set_add_call_with_no_default_args: try loadRequired(
"swiftide_completion_request_set_add_call_with_no_default_args"
),
complete_cancellable: try loadRequired("swiftide_complete_cancellable"),
completion_result_dispose: try loadRequired("swiftide_completion_result_dispose"),
completion_result_is_error: try loadRequired("swiftide_completion_result_is_error"),
completion_result_get_error_description: try loadRequired("swiftide_completion_result_get_error_description"),
completion_result_is_cancelled: try loadRequired("swiftide_completion_result_is_cancelled"),
completion_result_description_copy: try loadRequired("swiftide_completion_result_description_copy"),
completion_result_get_completions: try loadRequired("swiftide_completion_result_get_completions"),
completion_result_get_completion_at_index: try loadRequired("swiftide_completion_result_get_completion_at_index"),
completion_result_get_kind: try loadRequired("swiftide_completion_result_get_kind"),
completion_result_foreach_baseexpr_typename: try loadRequired(
"swiftide_completion_result_foreach_baseexpr_typename"
),
completion_result_is_reusing_astcontext: try loadRequired("swiftide_completion_result_is_reusing_astcontext"),
completion_item_description_copy: try loadRequired("swiftide_completion_item_description_copy"),
completion_item_get_label: try loadRequired("swiftide_completion_item_get_label"),
completion_item_get_source_text: try loadRequired("swiftide_completion_item_get_source_text"),
completion_item_get_type_name: try loadRequired("swiftide_completion_item_get_type_name"),
completion_item_get_doc_brief: try loadRequired("swiftide_completion_item_get_doc_brief"),
completion_item_get_doc_full_as_xml: loadOptional("swiftide_completion_item_get_doc_full_as_xml"),
completion_item_get_doc_raw: loadOptional("swiftide_completion_item_get_doc_raw"),
completion_item_get_associated_usrs: try loadRequired("swiftide_completion_item_get_associated_usrs"),
completion_item_get_kind: try loadRequired("swiftide_completion_item_get_kind"),
completion_item_get_associated_kind: try loadRequired("swiftide_completion_item_get_associated_kind"),
completion_item_get_semantic_context: try loadRequired("swiftide_completion_item_get_semantic_context"),
completion_item_get_flair: try loadRequired("swiftide_completion_item_get_flair"),
completion_item_is_not_recommended: try loadRequired("swiftide_completion_item_is_not_recommended"),
completion_item_not_recommended_reason: try loadRequired("swiftide_completion_item_not_recommended_reason"),
completion_item_has_diagnostic: try loadRequired("swiftide_completion_item_has_diagnostic"),
completion_item_get_diagnostic: try loadRequired("swiftide_completion_item_get_diagnostic"),
completion_item_is_system: try loadRequired("swiftide_completion_item_is_system"),
completion_item_get_module_name: try loadRequired("swiftide_completion_item_get_module_name"),
completion_item_get_num_bytes_to_erase: try loadRequired("swiftide_completion_item_get_num_bytes_to_erase"),
completion_item_get_type_relation: try loadRequired("swiftide_completion_item_get_type_relation"),
completion_item_import_depth: try loadRequired("swiftide_completion_item_import_depth"),
fuzzy_match_pattern_create: try loadRequired("swiftide_fuzzy_match_pattern_create"),
fuzzy_match_pattern_matches_candidate: try loadRequired("swiftide_fuzzy_match_pattern_matches_candidate"),
fuzzy_match_pattern_dispose: try loadRequired("swiftide_fuzzy_match_pattern_dispose")
)
}
}
extension sourcekitd_plugin_api_functions_t {
package init(_ sourcekitd: DLHandle) throws {
func loadRequired<T>(_ symbol: String) throws -> T {
guard let sym: T = dlsym(sourcekitd, symbol: symbol) else {
throw SKDError.missingRequiredSymbol(symbol)
}
return sym
}
func loadOptional<T>(_ symbol: String) -> T? {
return dlsym(sourcekitd, symbol: symbol)
}
self.init(
variant_functions_create: try loadRequired("sourcekitd_variant_functions_create"),
variant_functions_set_get_type: try loadRequired("sourcekitd_variant_functions_set_get_type"),
variant_functions_set_array_apply: try loadRequired("sourcekitd_variant_functions_set_array_apply"),
variant_functions_set_array_get_bool: try loadRequired("sourcekitd_variant_functions_set_array_get_bool"),
variant_functions_set_array_get_double: try loadRequired("sourcekitd_variant_functions_set_array_get_double"),
variant_functions_set_array_get_count: try loadRequired("sourcekitd_variant_functions_set_array_get_count"),
variant_functions_set_array_get_int64: try loadRequired("sourcekitd_variant_functions_set_array_get_int64"),
variant_functions_set_array_get_string: try loadRequired("sourcekitd_variant_functions_set_array_get_string"),
variant_functions_set_array_get_uid: try loadRequired("sourcekitd_variant_functions_set_array_get_uid"),
variant_functions_set_array_get_value: try loadRequired("sourcekitd_variant_functions_set_array_get_value"),
variant_functions_set_bool_get_value: try loadRequired("sourcekitd_variant_functions_set_bool_get_value"),
variant_functions_set_double_get_value: try loadRequired("sourcekitd_variant_functions_set_double_get_value"),
variant_functions_set_dictionary_apply: try loadRequired("sourcekitd_variant_functions_set_dictionary_apply"),
variant_functions_set_dictionary_get_bool: try loadRequired(
"sourcekitd_variant_functions_set_dictionary_get_bool"
),
variant_functions_set_dictionary_get_double: try loadRequired(
"sourcekitd_variant_functions_set_dictionary_get_double"
),
variant_functions_set_dictionary_get_int64: try loadRequired(
"sourcekitd_variant_functions_set_dictionary_get_int64"
),
variant_functions_set_dictionary_get_string: try loadRequired(
"sourcekitd_variant_functions_set_dictionary_get_string"
),
variant_functions_set_dictionary_get_value: try loadRequired(
"sourcekitd_variant_functions_set_dictionary_get_value"
),
variant_functions_set_dictionary_get_uid: try loadRequired("sourcekitd_variant_functions_set_dictionary_get_uid"),
variant_functions_set_string_get_length: try loadRequired("sourcekitd_variant_functions_set_string_get_length"),
variant_functions_set_string_get_ptr: try loadRequired("sourcekitd_variant_functions_set_string_get_ptr"),
variant_functions_set_int64_get_value: try loadRequired("sourcekitd_variant_functions_set_int64_get_value"),
variant_functions_set_uid_get_value: try loadRequired("sourcekitd_variant_functions_set_uid_get_value"),
variant_functions_set_data_get_size: try loadRequired("sourcekitd_variant_functions_set_data_get_size"),
variant_functions_set_data_get_ptr: try loadRequired("sourcekitd_variant_functions_set_data_get_ptr"),
plugin_initialize_is_client_only: try loadRequired("sourcekitd_plugin_initialize_is_client_only"),
plugin_initialize_custom_buffer_start: try loadRequired("sourcekitd_plugin_initialize_custom_buffer_start"),
plugin_initialize_uid_get_from_cstr: try loadRequired("sourcekitd_plugin_initialize_uid_get_from_cstr"),
plugin_initialize_uid_get_string_ptr: try loadRequired("sourcekitd_plugin_initialize_uid_get_string_ptr"),
plugin_initialize_register_custom_buffer: try loadRequired("sourcekitd_plugin_initialize_register_custom_buffer")
)
}
}
extension sourcekitd_service_plugin_api_functions_t {
package init(_ sourcekitd: DLHandle) throws {
func loadRequired<T>(_ symbol: String) throws -> T {
guard let sym: T = dlsym(sourcekitd, symbol: symbol) else {
throw SKDError.missingRequiredSymbol(symbol)
}
return sym
}
func loadOptional<T>(_ symbol: String) -> T? {
return dlsym(sourcekitd, symbol: symbol)
}
self.init(
plugin_initialize_register_cancellable_request_handler: try loadRequired(
"sourcekitd_plugin_initialize_register_cancellable_request_handler"
),
plugin_initialize_register_cancellation_handler: try loadRequired(
"sourcekitd_plugin_initialize_register_cancellation_handler"
),
plugin_initialize_get_swift_ide_inspection_instance: try loadRequired(
"sourcekitd_plugin_initialize_get_swift_ide_inspection_instance"
),
request_get_type: try loadRequired("sourcekitd_request_get_type"),
request_dictionary_get_value: try loadRequired("sourcekitd_request_dictionary_get_value"),
request_dictionary_get_string: try loadRequired("sourcekitd_request_dictionary_get_string"),
request_dictionary_get_int64: try loadRequired("sourcekitd_request_dictionary_get_int64"),
request_dictionary_get_bool: try loadRequired("sourcekitd_request_dictionary_get_bool"),
request_dictionary_get_uid: try loadRequired("sourcekitd_request_dictionary_get_uid"),
request_array_get_count: try loadRequired("sourcekitd_request_array_get_count"),
request_array_get_value: try loadRequired("sourcekitd_request_array_get_value"),
request_array_get_string: try loadRequired("sourcekitd_request_array_get_string"),
request_array_get_int64: try loadRequired("sourcekitd_request_array_get_int64"),
request_array_get_bool: try loadRequired("sourcekitd_request_array_get_bool"),
request_array_get_uid: try loadRequired("sourcekitd_request_array_get_uid"),
request_int64_get_value: try loadRequired("sourcekitd_request_int64_get_value"),
request_bool_get_value: try loadRequired("sourcekitd_request_bool_get_value"),
request_string_get_length: try loadRequired("sourcekitd_request_string_get_length"),
request_string_get_ptr: try loadRequired("sourcekitd_request_string_get_ptr"),
request_uid_get_value: try loadRequired("sourcekitd_request_uid_get_value"),
response_retain: try loadRequired("sourcekitd_response_retain"),
response_error_create: try loadRequired("sourcekitd_response_error_create"),
response_dictionary_create: try loadRequired("sourcekitd_response_dictionary_create"),
response_dictionary_set_value: try loadRequired("sourcekitd_response_dictionary_set_value"),
response_dictionary_set_string: try loadRequired("sourcekitd_response_dictionary_set_string"),
response_dictionary_set_stringbuf: try loadRequired("sourcekitd_response_dictionary_set_stringbuf"),
response_dictionary_set_int64: try loadRequired("sourcekitd_response_dictionary_set_int64"),
response_dictionary_set_bool: try loadRequired("sourcekitd_response_dictionary_set_bool"),
response_dictionary_set_double: try loadRequired("sourcekitd_response_dictionary_set_double"),
response_dictionary_set_uid: try loadRequired("sourcekitd_response_dictionary_set_uid"),
response_array_create: try loadRequired("sourcekitd_response_array_create"),
response_array_set_value: try loadRequired("sourcekitd_response_array_set_value"),
response_array_set_string: try loadRequired("sourcekitd_response_array_set_string"),
response_array_set_stringbuf: try loadRequired("sourcekitd_response_array_set_stringbuf"),
response_array_set_int64: try loadRequired("sourcekitd_response_array_set_int64"),
response_array_set_double: try loadRequired("sourcekitd_response_array_set_double"),
response_array_set_uid: try loadRequired("sourcekitd_response_array_set_uid"),
response_dictionary_set_custom_buffer: try loadRequired("sourcekitd_response_dictionary_set_custom_buffer")
)
}
}