• Sign In



  • Categories

    Extension Details



    Readme

    VB.NET

    Proprietary Visual Basic .NET support for Nova, published by Swipht Group.

    The extension highlights VB.NET source, lists namespaces, types, and members in the symbol list, offers keyword, type, runtime, and in-file completions, formats with dotnet format, and builds, runs, watches, tests, and publishes projects with the .NET SDK.

    Requirements

    • Nova 11 or later
    • Optional: the .NET SDK for building, running, testing, publishing, diagnostics, formatting, packages, references, and new projects. brew install --cask dotnet-sdk installs it.
    • Optional: a language server executable that supports Visual Basic, if you want more than this extension’s built-in features

    Usage

    Open a .vb file. Nova selects the VB.NET syntax automatically.

    While a VB.NET file is open, a .NET (Visual Basic) task is available for Build, Run, and Clean. You do not need to add it in Project Settings. Run builds first. A program that reads keyboard input should use that task’s Run action, which uses Nova’s task report.

    A VB.NET Tests task runs dotnet test, which builds first. Its Run action shows compile errors in the editor and test results in the task report. It uses the Test Project or Solution from Project Settings. When that is blank, it uses Project or Solution, then the nearest .vbproj, as Build does.

    A VB.NET Watch task runs dotnet watch run on the project Run uses. It builds and starts the program, then rebuilds and restarts it whenever a source file changes, applying hot reload when it can. Build errors appear in the editor. Stop the task to end it.

    Build, Run, and Clean use the project chosen in Project Settings, if there is one. Otherwise they use the nearest .vbproj in the focused file’s folder or a parent folder, stopping at the workspace folder. When a folder has several .vbproj files, the first in alphabetical order is used. When no .vbproj is found, a single .sln or .slnx in the workspace folder is used. Run always needs a .vbproj. When the chosen target is a solution, Run uses the nearest .vbproj above the focused file.

    The Editor menu also has Build, Run, Run Tests, Run Test at Cursor, Run Tests in File, Publish…, Format, Sort Imports, Complete Block, Insert Doc Comment, Add NuGet Package…, Update NuGet Packages…, Remove NuGet Package…, Add Project Reference…, Open Project File, Insert Module, and Insert Class. Build and Run use the same script and the same project choice as the task. They ask you to save every open VB.NET file first. A failed build shows the first error. Run shows the first lines the program prints. Run Tests uses the same project as the VB.NET Tests task. It shows each test project’s summary, plus the first failing test with its file, line, and message. Those commands do not open the task report.

    Run Test at Cursor runs the test method around the cursor, or every test in its class when the cursor is in a class but outside a method. Run Tests in File runs the tests in every class and module declared in the file. Both pass a --filter on the fully qualified name to dotnet test. Because the project’s root namespace is not read, the filter matches names that contain the namespace, class, and method declared in the file. Other methods in the class whose names start with the chosen method’s name are excluded, so running Parse does not also run ParseEmpty.

    Publish… asks whether to publish a portable app, which needs .NET installed to run, or a self-contained app for macOS (Apple silicon or Intel), Windows x64, or Linux x64. It runs dotnet publish on the project Run uses, in the current Configuration and with the Extra Build Arguments. When it finishes it offers to show the publish folder in Finder.

    Add NuGet Package… asks for a package ID and an optional version, for example Newtonsoft.Json 13.0.3. It runs dotnet add package on the project Build would use. When that is a solution, it uses the nearest .vbproj above the focused file. Open Project File opens that .vbproj, or the solution.

    Update NuGet Packages… runs dotnet list package --outdated and lists each package with a newer version. Choose one, or Update All when there are several, to update it to the latest version with dotnet add package. Remove NuGet Package… lists the packages in the project file and runs dotnet remove package for the one you choose. Add Project Reference… lists the .vbproj, .csproj, and .fsproj files in the open folder, skipping bin, obj, and hidden folders, and leaving out the project itself and projects it already references. It runs dotnet add reference for the one you choose. These commands change the same project as Add NuGet Package….

    Sort Imports sorts the first block of consecutive Imports lines in the file. System namespaces come first, then the rest in alphabetical order. Duplicates are removed.

    Format runs dotnet format whitespace on the editor’s current text, including unsaved changes. It indents with tabs or spaces to match the editor, and it never loads the project.

    The Extensions menu has New Project…, which asks for a template, a name, and a folder. The templates are Console App, Class Library, xUnit, MSTest, and NUnit. It then runs dotnet new <template> -lang VB and opens the main source file. Switch Debug/Release changes the open project’s Configuration setting. New Module and New Class open an untitled VB.NET document with the same skeleton as the insert commands.

    Diagnostics on save

    Saving a VB.NET file builds its project with dotnet build and marks the errors and warnings in that file. Errors in other files of the project are listed on line 1 with their location. Warnings in other files are left out. A file that is not in a project is not checked.

    A build runs the project’s own MSBuild targets, which can run any program. So the first time the extension would check a file in a project folder, usually when you open or save it, it asks whether to check that folder. The folder is the project you opened in Nova, or the file’s own folder when no project is open. The check builds only a .vbproj inside that folder, so a loose file in a subfolder of a project is checked only when the project is open in Nova. The check is also skipped, with a warning on line 1, when a Directory.Build.props, Directory.Build.targets, Directory.Build.rsp, Directory.Packages.props, Directory.Solution.props, Directory.Solution.targets, or NuGet.config file in a folder above the approved one would become part of the build. Allow Checks remembers the folder in your global preferences. Not Now skips checks there until Nova restarts. Extensions → VB.NET → Forget Trusted Projects clears every remembered folder. Build, Run, and Clean do not ask, because you start them yourself.

    The check is skipped when Diagnostics on Save is off, or when a language server is running.

    Editing

    Completions include names declared in the open file: types, members, parameters, enum members, constants, and variables. They also include the namespaces, types, members, enum members, and constants declared in the other .vb files of the file’s project, the folder of the nearest .vbproj and its subfolders, skipping bin and obj. They are not offered inside a comment or a string.

    Complete Block adds the closing statement that the block around the cursor is missing, such as End If, End Sub, Next, Loop, or #End Region, lined up with the block’s first line. When the cursor is on that first line, it also adds an indented empty line for the body and moves the cursor there. A one-line If … Then statement, an auto-implemented property, and members of an interface or MustOverride members have no closing statement.

    Insert Doc Comment adds an XML doc comment above the declaration on the cursor’s line, or the next declaration below it, and above its attributes. It includes a <summary>, a <typeparam> for each type parameter, a <param> for each parameter, and <returns> for functions, operators, and properties, then moves the cursor into the summary.

    Clips cover modules, classes, structures, interfaces, enums, routines, constructors, properties, events, custom events, operators, ToString/Equals/GetHashCode overrides, the IDisposable pattern, iterators, extension methods, Await, xUnit/MSTest/NUnit test methods, branches, loops, exception blocks, Using, With, SyncLock, lambdas, LINQ queries, and regions.

    Comment and uncomment use '.

    New lines are indented after block openers such as Sub, If … Then, For, Try, and Select Case, and End, Next, Loop, Else, Case, and Catch lines are outdented. Case lines line up with their Select Case. Use Format to re-indent in the Visual Studio style.

    A .NET (Visual Basic) task can still be added in Project → Project Settings… when a project wants its own settings.

    Configuration

    Open Extensions → Extension Library…, select VB.NET, and open Preferences.

    • .NET SDK is the dotnet executable. Leave it blank to use dotnet from /usr/local/share/dotnet, ~/.dotnet, Homebrew, or PATH.
    • Configuration is passed to dotnet with -c.
    • Extra Build Arguments are passed to dotnet build. Quote values that contain spaces.
    • Run Arguments are passed to the program when you run it. Quote values that contain spaces. They are not passed to the build.
    • Diagnostics on Save builds the project when a file is saved, after you allow checks for the project.
    • Language Server is an optional executable path, and Language Server Arguments are passed to it. The extension does not download or bundle a server. When the path is empty, syntax features still work. When the server is running, the save-time check is skipped.

    In Project → Project Settings… a project can choose its Project or Solution and its Test Project or Solution, and set Configuration, Extra Build Arguments, and Run Arguments. A blank project value inherits the global setting. A project can turn Diagnostics on Save off, but not on.

    Executable paths are read only from your global preferences, and the save-time check ignores the project’s Project or Solution and Extra Build Arguments settings. Project settings are stored inside the project folder, so this keeps a downloaded project from choosing what the extension runs when you open or save a file.

    Support

    If this extension is useful to you, consider supporting its development:

    License

    The extension itself is proprietary. See LICENSE. The vendored Tree-sitter grammar is MIT-licensed. See THIRD-PARTY-NOTICES.md.

    Release Notes

    Version 1.2.1

    • Run Test at Cursor now leaves out same-prefix sibling tests inside a #Region
    • Completions are no longer suppressed while typing a word that starts with “rem”
    • Complete Block on a header continued over several lines adds the body and End after the header’s last line
    • The save-time check also refuses when Directory.Solution.props or Directory.Solution.targets sits above the approved folder

    Version 1.2

    • Run Test at Cursor and Run Tests in File, which pass a --filter to dotnet test
    • VB.NET Watch task that runs dotnet watch, rebuilding and restarting the program when files change
    • Publish…, portable or self-contained for macOS, Windows, or Linux, with Show in Finder afterwards
    • Update NuGet Packages…, Remove NuGet Package…, and Add Project Reference…
    • Complete Block adds the missing End, Next, or Loop for the block around the cursor
    • Insert Doc Comment adds an XML doc comment with param, typeparam, and returns tags
    • Completions include types and members declared in the project's other files

    Version 1.1

    • VB.NET Tests task and Run Tests command using dotnet test, with a Test Project or Solution project setting
    • New Project… offers Console App, Class Library, xUnit, MSTest, and NUnit templates
    • Add NuGet Package… adds a package, optionally at a specific version, to the project
    • Open Project File, Sort Imports, and Switch Debug/Release commands
    • Clips for overrides, IDisposable, iterators, operators, custom events, extension methods, Await, and test methods

    Version 1.0.1

    • New extension icon: a classic VB form designer window

    Version 1.0

    • Tree-sitter highlighting for VB.NET, including interpolated strings, LINQ queries, lambdas, XML doc comments, and preprocessor directives
    • Symbols for namespaces, types, members, accessors, enum members, and fields; folding for blocks and declarations
    • Keyword, type, and runtime completions, plus names declared in the open file
    • Clips for types, members, properties, branches, loops, exception blocks, lambdas, and LINQ queries
    • A .NET (Visual Basic) task with Build, Run, and Clean for the nearest .vbproj, or a project or solution chosen in Project Settings
    • Errors and warnings from dotnet build on save, after you allow checks for the project
    • Format with dotnet format, using the editor's indentation
    • New Console Project, New Module, and New Class commands
    • Optional language server

    License

    Copyright (c) 2026 Swipht Group. All rights reserved.

    This extension is proprietary and confidential. No license is granted to use,
    copy, modify, merge, publish, distribute, sublicense, or sell the Swipht Group
    VB.NET extension except to the copyright holder.

    The Tree-sitter VB.NET parser distributed in binary and source form with this
    extension remains under the MIT License. See THIRD-PARTY-NOTICES.md.