Skip to content

Dev notes

Jonah Dahlquist edited this page Aug 20, 2018 · 6 revisions

Setting up

In order to be able to install the TypeScript package from Package Control, and also develop and test with a locally installed plug-in, you can add the local enlistment as a plug-in with a different name (here I use TypeScriptLang), and then disable one or the other via settings.

For example, to clone the repo locally and then add it as the TypeScriptLang plugin, use the below:

Windows

cd C:\src
git clone https://github.com/Microsoft/TypeScript-Sublime-Plugin.git
MKLINK /J "%APPDATA%\Sublime Text 2\Packages\TypeScriptLang" "C:\src\TypeScript-Sublime-Plugin"
MKLINK /J "%APPDATA%\Sublime Text 3\Packages\TypeScriptLang" "C:\src\TypeScript-Sublime-Plugin"

Mac

cd ~/src
git clone https://github.com/Microsoft/TypeScript-Sublime-Plugin.git
ln -s ~/"src/TypeScript-Sublime-Plugin" ~/"Library/Application Support/Sublime Text 3/Packages/TypeScriptLang"
ln -s ~/"src/TypeScript-Sublime-Plugin" ~/"Library/Application Support/Sublime Text 2/Packages/TypeScriptLang"

Linux

cd ~/src
git clone https://github.com/Microsoft/TypeScript-Sublime-Plugin.git
ln -s ~/src/TypeScript-Sublime-Plugin ~/.config/sublime-text-2/Packages
ln -s ~/src/TypeScript-Sublime-Plugin ~/.config/sublime-text-3/Packages

Note: This puts the repo under a src folder and uses file system links to add it to the plugin folder. Skip the ST2 or ST3 path addition if you don't have that version installed.

To disable the Package Control TypeScript plugin while you work with the local copy, open the Settings - User file from Preferences, and add "TypeScript" to the "ignored_packages" property. If it already contained "Vintage" (which it does by default), it should now appear as:

  "ignored_packages": [
    "Vintage", "TypeScript"
  ],

If/when you want to switch back to using the Package Control installed TypeScript plugin and disable the local dev plugin, replace the "TypeScript" string above with the name of the local plugin copy (e.g. "TypeScriptLang" above).

Coding style

In general, code should aim to align with the Python coding guidelines outlined in PEP8 (https://www.python.org/dev/peps/pep-0008/).

If writing Python code in Sublime Text 3, then the excellent Anaconda package (https://github.com/DamnWidget/anaconda) can be installed via Package Control, and provides linting and error highlighting for code that does not conform.

Debugging

Liberal logging using the logger module provided under the ./libs directory is often the fastest way to narrow down a problem. See usage throughout the code for example of this. By default this writes logging calls to a TS.log file in the plugin folder. The logging level can be set in the typescript/lib/global_vars.py file. Both the console log level and the log file level can be set independently.

As well as writing to the log file, output is also sent to the Sublime Console. Any exceptions that occur also appear in the Sublime Console, and this is a good place to start investigating.

For the Node process that runs the server, logging may be enabled by setting the TSS_LOG environment variable. Set to -level verbose to enable verbose logging (for example, on OS X, from the Terminal run export TSS_LOG="-level verbose" before launching Sublime from the same terminal session). Search on TSS_LOG in ./tsserver/tsserver.js for more details on valid values.

If logging doesn't help, there are a couple of tools that can be used to provide an interactive debugging experience.

Visual Studio

To debug in the Visual Studio Tools for Python see http://pytools.codeplex.com/wikipage?title=Features%20Remote%20Debugging . Copy the ptvsd directory/package outlined to the ./libs directory. The code already exists in the TypeScript.py file to try to load this module. Now from within VS, attach to tcp://127.0.0.1/ via the Python Remote Debugging transport.

PDB

To debug using the Python command-line debugger, the standard pdb module is insufficient, as stdin/stdout is not accessible in a plugin context. You can expose pdb over a TCP socket via the rpdb module. Clone this from https://github.com/tamentis/rpdb, copy the rpdb folder into the ./libs folder so that import rpdb works, i.e.:

cd ~/src
git clone https://github.com/tamentis/rpdb
cp -R ~/src/rpdb/rpdb/ ~/"src/TypeScript-Sublime-Plugin/lib/rpdb"

After importing rpdb, calling rpdb.set_trace() triggers a breakpoint. You may telnet 127.0.0.1 4444 to access the command line debugger functionality exposed by pdb. See https://docs.python.org/3/library/pdb.html for usage.

Clone this wiki locally