mirror of
https://github.com/apple/sourcekit-lsp.git
synced 2026-03-02 18:23:24 +01:00
Since Musl is sufficiently different from Glibc (see https://wiki.musl-libc.org/functional-differences-from-glibc.html), it requires a different import, which now should be applied to files that have `import Glibc` in them. Musl is a low footprint libc that's used in Linux distributions such as Alpine Linux, which allows producing fairly small container images. Additionally, unlike Glibc, musl allows full static linking, meaning apps can be easily distributed to an arbitrary Linux distribution that may have a version of Glibc incompatible with the one that Swift is usually built with or no Glibc installed at all.
47 lines
1.3 KiB
Swift
47 lines
1.3 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
|
|
#if canImport(Glibc)
|
|
import Glibc
|
|
#elseif canImport(Musl)
|
|
import Musl
|
|
#elseif canImport(CRT)
|
|
import CRT
|
|
#endif
|
|
|
|
public final class SKDRequestArray {
|
|
public let array: sourcekitd_object_t?
|
|
public let sourcekitd: SourceKitD
|
|
|
|
public init(_ array: sourcekitd_object_t? = nil, sourcekitd: SourceKitD) {
|
|
self.array = array ?? sourcekitd.api.request_array_create(nil, 0)
|
|
self.sourcekitd = sourcekitd
|
|
}
|
|
|
|
deinit {
|
|
sourcekitd.api.request_release(array)
|
|
}
|
|
|
|
public func append(_ value: String) {
|
|
sourcekitd.api.request_array_set_string(array, -1, value)
|
|
}
|
|
}
|
|
|
|
extension SKDRequestArray: CustomStringConvertible {
|
|
public var description: String {
|
|
let ptr = sourcekitd.api.request_description_copy(array)!
|
|
defer { free(ptr) }
|
|
return String(cString: ptr)
|
|
}
|
|
}
|