Vscode Nsis Save

Language syntax, IntelliSense and build system for Nullsoft Scriptable Install System (NSIS)

Project README

vscode-nsis

Version Visual Studio Marketplace Installs Open VSX Downloads Build

Language syntax, IntelliSense and build system for Nullsoft Scriptable Install System (NSIS).

Screenshot

Screenshot of NSIS in Visual Studio Code with Hopscotch theme

Features

  • Language syntax for NSIS and NSIS Language Files
  • IntelliSense for core NSIS commands, variables and predefines
  • IntelliSense for core plug-ins:
    • AdvSplash
    • Banner
    • BgImage
    • Dialer
    • InstallOptions
    • LangDLL
    • Math
    • nsDialogs
    • nsExec
    • NSISdl
    • Splash
    • StartMenu
    • System
    • UserInfo
    • VPatch
  • IntelliSense for core libraries (“Useful Headers”):
    • FileFunc
    • LogicLib
    • Memento
    • Modern UI
    • MultiUser
    • Sections
    • StrFunc
    • WinMessages
    • WinVer
    • WordFunc
    • x64
  • NSIS Diagnostics
  • Drunken NSIS
  • Build Tools
  • Environment Variables

You can further extend NSIS support with IntelliSense for third-party plug-ins.

Installation

Extension Marketplace

Launch Quick Open, paste the following command, and press Enter

ext install idleberg.nsis

CLI

With shell commands installed, you can use the following command to install the extension:

$ code --install-extension idleberg.nsis

Packaged Extension

Download the packaged extension from the the release page and install it from the command-line:

$ code --install-extension path/to/nsis-*.vsix

Alternatively, you can download the packaged extension from the Open VSX Registry or install it using the ovsx command-line tool:

$ ovsx get idleberg.nsis

Clone Repository

Change to your Visual Studio Code extensions directory:

Windows

# Powershell
cd $Env:USERPROFILE\.vscode\extensions
:: Command Prompt
$ cd %USERPROFILE%\.vscode\extensions

Linux & macOS

$ cd ~/.vscode/extensions/

Clone repository as idleberg.nsis:

$ git clone https://github.com/idleberg/vscode-nsis idleberg.nsis

Inside the cloned directory, install dependencies using your preferred Node package manager:

$ npm install

Build the source:

npm run build

Usage

IntelliSense

With most commands, you can specify available options before completion. For instance, rather than completing RequestExecutionLevel and then specifying an option, you can directly choose RequestExecutionLevel user from the completion menu.

To complete compile time commands, variables or predefines, make sure to omit special characters like !, $ and brackets:

  • include completes to !include
  • INSTDIR completes to $INSTDIR
  • NSIS_VERSION completes to ${NSIS_VERSION}

However, you have to type __LINE__ to complete to ${__LINE__}.

There are several special cases for your convenience:

  • MB_OK completes to MessageBox MB_OK "messagebox_text"
  • onInit completes to a Function .onInit block
  • LogicLib completes to !include "LogicLib.nsh"

Drunken NSIS

Fuzzy syntax completions are available through “Drunken NSIS”, which tries to iron out some of the inconsistencies in the NSIS language, for instance word order.

Examples:

Interchangable word order of NSIS language and library functions

  • ReadFile completes to FileRead
  • INIStrRead completes to ReadINIStr
  • SetSectionText completes to SectionSetText
  • SetLog completes to LogSet
  • FirstFind completes to FindFirst
  • ${LineFind} completes to ${FindLine}

Building

Before you can build, make sure makensis is in your PATH environment variable. Alternatively, you can specify the path to makensis in your user settings.

makensis

Example:

{
  "nsis.compiler.pathToMakensis": "C:\\Program Files (x86)\\NSIS\\makensis.exe"
}

To trigger a build, select NSIS: Save & Compile” from the command-palette or use the default keyboard shortcut Ctrl+Shift+B. The strict option treats warnings as errors and can be triggered using Ctrl+Alt+Shift+B.

Options

You can tweak your default settings by editing your user settings.

Task Runner

If you prefer Visual Studio Code's built-in Task Runner to build scripts, you can create tasks.json in the project root using the NSIS: Create Build Task command from the command-palette.

Note: The created Task Runner will adapt to the user settings specified in settings.json.

Environment Variables

This extension supports a variety of ways to provide environment variables such as NSISDIR or NSISCONFDIR. The following precedence applies:

  1. terminal.integrated.shell.* setting
  2. .env files
  3. system-wide environment variables

Note: Some operating systems require Visual Studio Code to be launched from terminal in order to access system-wide environment variables.

Additionally, you can pass special environment variables prefixed with NSIS_APP_ as definitions to your installer script.

Example
# .env
NSIS_APP_ENVIRONMENT=development
# installer.nsi
!if ${NSIS_APP_ENVIRONMENT} == "development"
  DetailPrint "Valuable Debug Information"
!endif

Telemetry

As of v4.2.0, this extension makes use of telemetry. In the following, I will detail which tracking events are fired.

Event Name Properties
compile { hasErrors: boolean, strictMode: boolean }
convertNLF { hasErrors: boolean }
openSettings -
showVersion { hasErrors: boolean }
showCompilerFlags { hasErrors: boolean }
showHelp { command: string?, hasErrors: boolean }

To verify this behaviour, you can always search the source-code.

This extension follows Visual Studio Code's global telemetry setting. You can also disable telemetry independently from the global setting.

But why?

I'm currently in the process of sketching out plan for a complete rewrite. To evaluate which features I'm going to keep, alter or remove, data from users other than myself is valuable input in this process. Also, it helps finding client errors that I did not stumble upon myself.

License

If not otherwise specified (see below), files in this repository fall under The MIT License.

An exception is made for files in readable text which contain their own license information, or files where an accompanying file exists (in the same directory) with a “-license” suffix added to the base-name name of the original file, and an extension of txt, html, or similar. For example “tidy” is accompanied by “tidy-license.txt”.

Open Source Agenda is not affiliated with "Vscode Nsis" Project. README Source: idleberg/vscode-nsis

Open Source Agenda Badge

Open Source Agenda Rating