• This repository has been archived on 22/Jun/2024
  • Stars
    star
    175
  • Rank 217,372 (Top 5 %)
  • Language
    TypeScript
  • License
    Apache License 2.0
  • Created almost 7 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

New home of Swift Development Environment for VS Code

Swift Development Environment

Build Status Visual Studio Code Version Swift Version SwiftPM compatible Platforms License Apache

SDE adds Swift code completion and hover help to Visual Studio Code on macOS and Linux.

If possible, always favor SSWG Swift VS Code extension over this one. This will only receive maintenance updates, but no new features or other improvements.

Fork Notice: This is the new home of SDE initially been developed by @jinmingjian. It is now maintained by @vknabel. jinmingjian/sde is no longer maintained and does only support Swift 3. This fork supports Swift 3.1, 4 and 5.

preview

Installation

You have the choice between three different language server implementations.

sde.languageServerMode Comments Swift Versions Install
sourcekit-lsp default Apple's official one. Activley developed. 4 and 5 #Using sourcekit-lsp
sourcekite SDE's one. Actively maintained. 5 and older versions 3.1 and 4 #Using sourcekite
langserver RLovelett's LSP. Not maintained. 4.1, macOS only #Using Langserver Swift

sourcekit-lsp is easier to install and will be updated more frequently. On the other hand sourcekite treats standalone files, Xcode projects and SwiftPM modules differently and is more configurable. If you can't decide, you can install both and swap out the used LSP by setting sde.languageServerMode to sourcekite, sourcekit-lsp or langserver.

Using sourcekit-lsp

Note: on macOS SDE defaults to using your Xcode's Swift and sourcekit-lsp. In that case, SDE should work out of the box!

  1. Install SDE.
  2. Recent versions of Xcode ship with sourcekit-lsp, you can check its path running xcrun -f sourcekit-lsp. If not found, please install sourcekit-lsp.
  3. Set "sourcekit-lsp.serverPath": "absolute path to the sourcekit-lsp executable" and "sde.languageServerMode": "sourcekit-lsp".

Using sourcekite

  1. sourcekite does only work with SDE. Make sure you have it installed.

  2. Install the companion project sourcekite.

    $ git clone https://github.com/vknabel/sourcekite
    $ cd sourcekite
    
    # For Linux
    # Ensure you have libcurl4-openssl-dev installed (not pre-installed)
    # $ apt-get update && apt-get install libcurl4-openssl-dev
    # Ensure LD_LIBRARY_PATH contains /your/swift/usr/lib
    # And have $ sudo ln -s /your/swift/usr/lib/libsourcekitdInProc.so /usr/lib/libsourcekitdInProc.so
    $ make install PREFIX=/usr/local
    
    # For macOS
    $ make install PREFIX=/usr/local
  3. Add the absolute path to your compiled sourcekite binary swift.path.sourcekite to your vscode settings as /usr/local/sourcekite.

If you experience any problems during installation, file an issue. All kind of feedback helps especially when trying to automate this.

Using Langserver Swift

Besides sourcekit-lsp and sourcekite SDE allows you to use RLovelett/langserver-swift.

If you prefer using an alternative language server, set set sde.languageServerMode to langserver and let swift.languageServerPath point to your installed language server.

Though in most cases sourcekit-lsp and sourcekite should produce better results and performance.

Configuration

Config Type Default Description
sourcekit-lsp.serverPath string The path of the sourcekit-lsp executable. In SDE: defaults to the toolchain's sourcekit-lsp.
sourcekit-lsp.toolchainPath string The path of the swift toolchain. In SDE: defaults to Xcode's default toolchain.
swift.languageServerPath string /usr/local/bin/langserver-swift [DEPRECATED] The fully qualified path to the Swift Language Server executable.
swift.path.sourcekite string The fully path to the sourcekite(SDE's LS backend).
swift.path.swift_driver_bin string /usr/bin/swift The fully path to the swift driver binary.
swift.path.shell string /bin/sh The fully path to the shell binary.
sde.sourcekit.compilerOptions string[] [] Optional compiler options like the target or search paths. Will only be used as default. (debug | release).yaml builds will override these settings.
swift.targets object[] [] If SDE cannot reliably detect all targets, you can manually configure them.
sde.enable boolean true Enable SDE functionality
sde.languageServerMode string sourcekite Decides which language server should be used. sourcekite is the default LSP for SDE, sourcekit-lsp is Apple's official one and langserver is RLovelett's Langserver.
sde.enableTracing.client boolean false Enable tracing output for SDE client
sde.enableTracing.LSPServer boolean false Enable tracing output for SDE LS server
sde.buildOnSave boolean true Indicates wether SDE shall build the project on save.
sde.swiftBuildingParams string[] ["build"] The params that shall be passed to the swift command.
swift.diagnosis.max_num_problems number 100 Controls the maximum number of problems produced by the server. NOET: Not used now.

Commands

Title Command
Build Package sde.commands.build
Restart Language Server sde.commands.restartLanguageServer
Run Default Target sde.commands.run
Run Target… sde.commands.selectRun
Restart Target sde.commands.restartRun
Stop Running Target sde.commands.stop
Clean Package sde.commands.clean

Contributors

FAQ

How to contribute to this project?

There are a lot of ways you could contribute to either this project or the Swift on VS Code itself. For more information head over to CONTRIBUTING.md.

How can I debug my SwiftPM project?

Debugging your Swift targets requires a different extension LLDB Debugger. You can follow this tutorial: vknabel.com/pages/Debugging-Swift-in-VS-Code.

How do I get autocompletion when using TensorFlow?

You can add the following configs. This will improve your autocompletion. Though currently the TensorFlow module will not be indexed yet.

// .vscode/settings.json example for TensorFlow
{
  "sde.swiftBuildingParams": ["build", "-Xlinker", "-ltensorflow"],
  "sde.languageServerMode": "sourcekite",
  "sourcekit-lsp.toolchainPath": "/Library/Developer/Toolchains/swift-tensorflow-RELEASE-0.3.1.xctoolchain",
  "swift.path.swift_driver_bin": "/Library/Developer/Toolchains/swift-tensorflow-RELEASE-0.3.1.xctoolchain/usr/bin/swift"
}

In case you find a way to get autocompletion for the TensorFlow module to work, please submit a PR or open an issue.

How do I get autocompletion for UIKit?

With sourcekite, you can add new autocompletion targets through your configuration.

// .vscode/settings.json example for iOS and WatchOS
{
  "swift.targets": [
    {
      "name": "YourApp",
      "path": "YourApp/YourApp",
      "sources": ["**/*.swift"],
      "compilerArguments": [
        "-sdk",
        "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk",
        "-target",
        "arm64-apple-ios11.0"
      ]
    },
    {
      "name": "YourWatchApp",
      "path": "YourApp/YourWatchExtension",
      "sources": ["**/*.swift"],
      "compilerArguments": [
        "-sdk",
        "/Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS.sdk",
        "-target",
        "armv7k-apple-watchos4.0"
      ]
    }
  ]
}

Since Xcode 11.4, you may use its built-in support for sourcekit-lsp

// .vscode/settings.json example for iOS
{
  "sde.languageServerMode": "sourcekit-lsp",
  "sourcekit-lsp.serverPath": "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/sourcekit-lsp",
  "sourcekit-lsp.toolchainPath": "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain",
  "sde.swiftBuildingParams": [
    "build",
    "-Xswiftc",
    "-sdk",
    "-Xswiftc",
    "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk",
    "-Xswiftc",
    "-target",
    "-Xswiftc",
    "arm64-apple-ios11.0"
  ]
}
// .vscode/settings.json example for WatchOS
{
  "sde.languageServerMode": "sourcekit-lsp",
  "sourcekit-lsp.serverPath": "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/sourcekit-lsp",
  "sourcekit-lsp.toolchainPath": "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain",
  "sde.swiftBuildingParams": [
    "build",
    "-Xswiftc",
    "-sdk",
    "-Xswiftc",
    "/Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS.sdk",
    "-Xswiftc",
    "-target",
    "-Xswiftc",
    "armv7k-apple-watchos4.0"
  ]
}

Build failed! What should I do?

Go to vscode OUTPUT window, then select SPM. The OUTPUT window will tell you what's wrong.

It says Build error: root manifest not found??

The Root Manifest refers to a Package.swift file of the Swift Package Manager (short SwiftPM, SPM). And this extension requires a Swift Package (a project for the SwiftPM) to function. Projects created by Xcode rely on a different format (*.xcodeproj and *.xcodeworkspace) and the extension cannot handle these.

You'll need to create a new Swift Package and "wire it up" with your Xcode Project. There are some tips and guides linked in this SO question.

I'd like to have a different build paths than usually. How can I achieve that?

You can compile your app using a command like swift build --build-path "./.build-macos" on macOS and swift build --build-path "./.build-linux" on Linux, e.g. from within a docker container, you just need to add the appropriate building parameter:

// .vscode/settings.json
{
  "sde.swiftBuildingParams": [
    "build",
    "--build-path",
    "./.build-macos"
  ]
}

Other questions?

If so, file an issue, please :)

License

Apache License v2.

3rd-party Sources Thanks

  1. dbgmits, very nice structure of sources, but of which in my heavy modification to support non-MI and much more

More Repositories

1

Archery

Declare all your project's metadata and what you can do with it in one single place.
Swift
46
star
2

vscode-swiftformat

SwiftFormat for VS Code
TypeScript
43
star
3

puffery

A SwiftUI iOS App and Vapor Server to send push notifications fueled by Siri Shortcuts.
Swift
38
star
4

vscode-apple-swift-format

VS Code extension for formatting Swift code with apple/swift-format.
TypeScript
31
star
5

vscode-swiftlint

VS Code extension to enforce Swift style and conventions via SwiftLint
TypeScript
21
star
6

Finite

Finite is a simple, pure Swift finite state machine.
Swift
19
star
7

lithia

Early development, experimental functional programming language with an implicit but strong and dynamic type system.
Go
13
star
8

Rock

With Rock you can easily install CLIs built with Swift Package Manager. Prefer vknabel/Archery and yonaskolb/Mint instead
Swift
13
star
9

vscode-swift-coverage

Display coverage reports next to your code for Swift Package Manager projects.
TypeScript
9
star
10

PromptLine

Run shell scripts out of Swift with ease
Swift
5
star
11

SwiftHook

A simple and key-based callback library written in Swift.
Swift
5
star
12

QueuedNet

QueuedNet is a Swift framework to parallelize applications more declaratively.
Swift
4
star
13

All-in-One-Swift-for-vscode

Provides VSCode extensions fo Swiftlint, Debugger and Autocompletion for Swift.
4
star
14

status-bar-style

A decorator to declare the StatusBar style of your Ionic Page
TypeScript
3
star
15

StencilArrow

Render Stencil-Templates with contents of your Archerfile
Swift
3
star
16

vagrant-processwire

Simple vagrant configuration for running ProcessWire
ApacheConf
2
star
17

ValidatedInjectAdditions

Adds convenience when using ValidatedExtension and EasyInject
Swift
2
star
18

EasyInject

A lightweight composition and dependency injection framework for Swift.
Swift
2
star
19

RockSpecs

RockSpecs is the `default` index of https://github.com/vknabel/Rock.
Ruby
2
star
20

RxLens

Enables reactive read and copy-on-write access.
Swift
2
star
21

kcd-munich-2022-acorn

Ruby
1
star
22

ValidatedExtension

A Swift Micro-Library for Somewhat Dependent Types
Swift
1
star
23

localice

Go
1
star
24

go-puffery

Read and send push notifications to your iOS device from your command line
Go
1
star
25

empty-cli

Is just an empty CLI without any dependencies to be used as an example.
Swift
1
star
26

molecule-pagination

A pagination directive for Ionic and Angular
TypeScript
1
star
27

MintArrow

Run CLIs written in Swift using Mint
Swift
1
star
28

BeakArrow

Run functions inside Swift files
Swift
1
star
29

Lens

A basic implementation of Lenses
Swift
1
star
30

ArrayMap

ArrayMap is a SequenceType containing multiple values per key.
Swift
1
star
31

vknabel.github.io

My personal homepage and blog
HTML
1
star
32

Taps

Taps is a lightweight Unit Test library optimized for asynchronous code and generating TAP13 compatible output.
Swift
1
star