Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>VSCode LevelupsNew to Visual Studio Code? Get it now.
VSCode Levelups

VSCode Levelups

Sebastian Gross

|
2 installs
| (0) | Free
Spring Boot navigation, property intelligence, and Liquibase tooling.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

VSCode Levelups

VSCode Levelups

Missing navigation, language intelligence, and Liquibase tooling for Java Spring Boot projects.

A VS Code extension that adds missing navigation, language intelligence, and Liquibase tooling for Java Spring Boot projects.

The extension runs entirely in the background. It contributes no custom views, sidebars, webviews, or status bar items. The only surfaces it uses are standard VS Code "Go to Definition", a single command, an optional CodeLens, and an output channel. Everything is controlled through settings.json, and every feature is enabled by default.

At a glance

  • Navigate (Ctrl/Cmd-Click → Go to Definition):
    • @PreAuthorize SpEL → beans, methods, T(pkg.Class) types
    • @Value("${property}") → the property declaration
    • @Qualifier("bean") → the bean definition
    • @Value("#{jobParameters['KEY']}") → where the Spring Batch param is set
    • Liquibase <include> / <includeAll> / <sqlFile> → the referenced file
  • Highlight (TextMate grammar injection, zero runtime cost):
    • SpEL in @PreAuthorize and ${…} in @Value
    • SQL in Liquibase <sql> blocks
    • JPQL/SQL in Spring Data @Query(…)
  • Run: execute a Liquibase <sql> block against a configured connection.

Features

1. Spring Security @PreAuthorize navigation

Ctrl/Cmd-Click inside SpEL expressions to jump to the referenced code:

  • @bean → the bean's class
  • @bean.method(...) → the method declaration
  • T(pkg.Class) → the class/enum declaration

Beans are discovered from @Service, @Component, @Repository, @Controller, @RestController (default and explicit names, including fully-qualified annotations) and from @Bean factory methods.

@PreAuthorize("@lptUserDetailService.userHasGroup(#id) or " +
              "hasRole(T(de.telekom.lpt.model.UserGroup).ADMIN)")
public void update(Long id) { … }
//  Ctrl/Cmd-Click: lptUserDetailService → the @Service class,
//  userHasGroup → the method, UserGroup → the enum.

SpEL expressions inside @PreAuthorize (and @PostAuthorize/@PreFilter/ @PostFilter) are syntax-highlighted — beans, method calls, T(...) types, #parameters, logical operators and security functions are colored instead of appearing as plain string text.

2. Spring @Value property navigation

Ctrl/Cmd-Click a property reference to jump to its declaration:

@Value("${kks.retry-delay}")   // -> kks.retry-delay=1000
@Value("${kks.retry-delay:1000}") // default value is ignored

Indexed sources: application*.properties, bootstrap*.properties, and application*/bootstrap*.{yml,yaml} (nested YAML keys are flattened to dotted keys). When a key is defined in multiple files, VS Code shows a picker.

${...} placeholders inside @Value are syntax-highlighted: the placeholder punctuation, the property key, and the :default portion are colored distinctly.

3. @Qualifier bean navigation

Ctrl/Cmd-Click the bean name inside @Qualifier("beanName") to jump to the bean definition (a @Bean factory method or a @Service/@Component/etc. class registered under that name). Reuses the same bean index as @PreAuthorize.

@Qualifier("tamTkg46NeLiItemWriter") ItemWriter<Foo> writer
//          ^ Ctrl/Cmd-Click → @Bean ItemWriter<…> tamTkg46NeLiItemWriter()

4. Spring Batch job-parameter navigation

Ctrl/Cmd-Click a key inside @Value("#{jobParameters['KEY']}") to jump to where the parameter is set via a JobParametersBuilder (.addString/.addLong/ .addDate/.addDouble/.addParameter/.addJobParameter("KEY", …)). Dotted keys are supported; when a key is set in several places, VS Code shows a picker.

// Usage site — Ctrl/Cmd-Click the key:
@Value("#{jobParameters['MQ_MESSAGE_INCOMING.ID']}") String id

// …jumps to the definition site:
new JobParametersBuilder()
    .addString("MQ_MESSAGE_INCOMING.ID", messageId)   // ← navigates here
    .addLong("chunk", 100L)
    .toJobParameters();

5. Liquibase SQL highlighting

SQL embedded in Liquibase changelog XML is highlighted as SQL instead of plain XML text, including SQL inside <rollback> and <sql> tags that carry attributes. Delivered via a TextMate grammar injection — zero runtime cost.

<changeSet id="1" author="me">
  <sql dbms="oracle">
    INSERT INTO customer (id, name) VALUES (1, 'ACME');   <!-- highlighted as SQL -->
  </sql>
  <rollback>
    <sql>DELETE FROM customer WHERE id = 1;</sql>
  </rollback>
</changeSet>

6. Liquibase SQL execution

Place the cursor inside a <sql> block and run Levelups: Execute SQL Block (or use the CodeLens above the block). The nearest SQL block is extracted, you pick a target from a QuickPick listing every profile in vscodeLevelups.sql.connections (shown as name + JDBC URL), and the SQL runs against the selected connection; results are written to the VSCode Levelups output channel. If no connections are configured, a prompt offers to open the relevant setting.

SQL execution ships with a built-in mock driver that simulates execution and reports affected rows. Real database drivers are intentionally not bundled. To execute against a real database, replace the driver via the SqlDriver extension point in src/liquibase/sqlExecution.ts (interface SqlDriver { execute(sql, conn): Promise<SqlExecResult> }).

7. Liquibase file-reference navigation

Ctrl/Cmd-click a path inside a changelog's <include file="…">, <sqlFile path="…">, or <includeAll path="…"> to jump to the referenced file or directory. Paths are resolved relative to the current changelog when relativeToChangelogFile="true"; otherwise common resource roots (src/main/resources, src/test/resources) and the workspace folders are also tried. Only targets that exist on disk are linked, and the whole path is underlined as a single link.

<databaseChangeLog>
  <!-- Ctrl/Cmd-Click the path to open the referenced changelog: -->
  <include file="changelog/db.lpt-main-26.02.00.19.xml" relativeToChangelogFile="true"/>
  <includeAll path="changelog/parts"/>
  <sqlFile path="sql/seed.sql"/>
</databaseChangeLog>

8. SQL highlighting in @Query (Spring Data JPA)

JPQL/SQL inside @Query("…") is syntax-highlighted instead of appearing as plain string text — including @Query(value = "…", nativeQuery = true), concatenated multi-line strings, and Java text blocks ("""…"""). Delivered via TextMate grammar injection (zero runtime cost), so like the other highlighting it is always on and has no setting.

// Single-line JPQL — keywords, identifiers and literals are colored:
@Query("SELECT i FROM ZebraTmpMqMessageIncoming i WHERE i.messageId = :messageId")
Optional<ZebraTmpMqMessageIncoming> findByMessageId(@Param("messageId") String messageId);

// Native SQL:
@Query(value = "SELECT * FROM mq_message_incoming WHERE id = :id", nativeQuery = true)
Optional<ZebraTmpMqMessageIncoming> findNative(@Param("id") BigInteger id);

// Multi-line via a Java text block:
@Query("""
        SELECT i FROM ZebraTmpMqMessageIncoming i
        WHERE i.status = :status
        ORDER BY i.createdAt DESC
        """)
Page<ZebraTmpMqMessageIncoming> findByStatus(@Param("status") String status, Pageable pageable);

Settings

Setting Default Description
vscodeLevelups.enablePreAuthorizeNavigation true Navigation inside @PreAuthorize SpEL expressions.
vscodeLevelups.enableValueNavigation true Navigation from @Value to property definitions.
vscodeLevelups.enableQualifierNavigation true Navigation from @Qualifier("bean") to the bean definition.
vscodeLevelups.enableJobParameterNavigation true Navigation from @Value("#{jobParameters['KEY']}") to where the job parameter is set.
vscodeLevelups.enableLiquibaseSqlExecution true Allow executing SQL blocks from Liquibase XML.
vscodeLevelups.enableLiquibaseFileNavigation true Navigation from include/includeAll/sqlFile references to the referenced files.
vscodeLevelups.sql.connections [] SQL connection profiles (see below).

Liquibase SQL highlighting is always on. It is delivered through a static TextMate grammar injection contributed in package.json, which has zero runtime cost and cannot be toggled at runtime, so it has no setting.

Connection profile shape:

{
  "vscodeLevelups.sql.connections": [
    {
      "name": "DEV",
      "jdbcUrl": "jdbc:oracle:thin:@localhost:1521/XEPDB1",
      "username": "app",
      "password": "secret"
    }
  ]
}

Each feature can be toggled independently at runtime; flipping a setting registers or disposes the relevant providers without a window reload.

Compatibility

Works alongside the Java Extension Pack / Red Hat Java extension. Supports Maven, Gradle, multi-module, and multi-root workspaces. All providers are additive — VS Code merges their results with those from other extensions.

License

MIT © Sebastian Gross

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft