SourceKit for Safari is a browser extension for GitHub, that enables IDE features on your browser such as symbol navigator, go to definition and documentation on hover.
This is really proof of concept code--functional proof of concept, but proof of concept nonetheless--and has not been thoroughly tested. Use at your own risk.
Bring up a list of document items, then select your desired document item to jump to the respective source code location.
Hovering the mouse cursor over a symbol shows documentation.
If the text at the mouse cursor is a symbol defined in another file, turn it into a link navigating to the file.
- Download the latest
SourceKit for Safari.app
from GitHub Releases, run it once to install the extension. - Open Safari - Preferences - Extension, make sure SourceKit for Safari is checked on the left panel.
-
Download the latest
SourceKit for Safari.app
from GitHub Releases, run it once to install the extension. -
Open the Extension Management page by navigating to
chrome://extensions
.- The Extension Management page can also be opened by clicking on the Chrome menu, hovering over More Tools then selecting Extensions.
-
Enable Developer Mode by clicking the toggle switch next to Developer mode.
- Click the Load Unpacked button and select the extension directory (
ChromeExtension
directory in the archive).
See also Chrome extension development tutorial.
- Open
SourceKit for Safari.app
(Unlike Safari Extension, Chrome Extension communicates with the language server through the host application. Therefore, the host application must be running while using the extension.)
SourceKit for Safari depends on SourceKit-LSP. In order to use SourceKit for Safari, you need to install SourceKit-LSP and set the installation location.
If you have installed Xcode 11.4+ or the corresponding Command Line Tools package, the SourceKit-LSP server is included and can be run with xcrun sourcekit-lsp
.
If you are using a toolchain from Swift.org, the SourceKit-LSP server is included and can be run with xcrun --toolchain swift sourcekit-lsp
.
If your toolchain did not come with SourceKit-LSP, you should build it from source.
SourceKit for Safari uses SourceKit-LSP that comes with Xcode 11.4 by default.
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/sourcekit-lsp
If you want to use other SourceKit-LSP binary, click the toolbar icon and set its full path to the settings text field.
(for Chrome users, click the extension toolbar icon, then select options
in the menu.)
Hover over symbols in the source code; then, the documentation for that symbol a popup will show or turn it link to the definition (The first may take some time).
SourceKit for Safari will automatically clone a GitHub repository to your local filesystem (~/Library/Group Containers/27AEDK3C9F.com.kishikawakatsumi.SourceKitForSafari
) when you access there.
Then, when the source file is displayed on the browser, it automatically communicates with SourceKit-LSP to get information about the source code. Then show them with a popup on the browser.
SourceKit for Safari does not automatically update local repositories.
If the local repository is outdated, click the toolbar icon and press the Sync button to update it.
Make sure the host application (SourceKit for Safari.app
) is running. Chrome extension requires the host application to communicate to the language server.
The current DOM parsing algorithm is not smart yet. Therefore, whitespace is sometimes set as a hover area instead of a symbol. In that case, the hoverable area is too small.
Correct | Wrong |
---|---|
To use Node Packaged Modules in injected scripts, it requires to combine multiple modules and JavaScript files into one JavaScript file using Browserify.
To do that, run the following commands in Terminal.app
. (Node.js development environment such as npm
command must be set up in advance.)
cd ./SafariExtension/js
npm install
npm run build
Please make sure to perform clean build when you change injected JavaScript or CSS files. Otherwise, the changes will not install correctly.