Last PL
HTML, CSS, and JavaScript tooling inside Oracle PL/SQL.
Last PL works entirely offline and adds highlighting, IntelliSense, diagnostics,
Emmet, and formatting to embedded web code. It layers onto your existing PL/SQL
grammar with no server, account, or build step.
Requirements
- VS Code 1.101 or newer.
- One PL/SQL grammar provider:
- Oracle SQL Developer Extension for VS Code (
oracle-sql), or
xyz.plsql-language (plsql).
If both providers claim the same files, disable one or configure
files.associations. Last PL layers onto whichever provider owns the document.
Supported regions
| PL/SQL construct |
Embedded language |
HTP.*, HTF.*, OWA_UTIL.* strings |
HTML |
APEX_JAVASCRIPT.ADD_INLINE_CODE / ADD_ONLOAD_CODE |
JavaScript |
ADD_REQUIREJS_DEFINE expression argument |
JavaScript |
ADD_LIBRARY.p_requirejs_js_expression |
JavaScript |
APEX_CSS.ADD |
CSS |
/*html*/, /*css*/, /*js*/ before a string |
Selected language |
Names, paths, keys, and other non-code APEX arguments remain PL/SQL. Regular,
national, paired q-quoted, symmetric, and Unicode-delimited literals are
supported, including concatenated strings and multiline call heads.
htp.p('<main class="card">Hello</main>');
apex_css.add('.card { padding: 1rem; }');
apex_javascript.add_inline_code('console.log("ready");');
l_fragment := /*html*/ q'[<button type="button">Save</button>]';
Features
- Accurate HTML/CSS/JavaScript highlighting without replacing the host PL/SQL
grammar. JavaScript identifiers receive contextual semantic coloring, including
inside nested
<script> blocks, and bracket colors restart at the same local
depth as a regular HTML script.
- Completion, hover, definitions, references, signature help, document symbols,
folding, linked tag editing, color previews, and selection expansion.
- HTMLHint, the VS Code CSS language service, and ESLint or Acorn diagnostics,
with squiggles mapped back to the original PL/SQL.
- Format Document support for PL/SQL and embedded HTML/CSS/JavaScript, with
string and q-quote safety checks.
- Emmet, HTML tag auto-close, and a status-bar region counter.
Configuration
Settings use the plsqlWebEmbedded prefix. Common options include:
detect.{htp,owaUtil,taggedComments}
diagnostics.{html,css,js,jsLinter}
diagnostics.{eslintRules,eslintGlobals,apexPreset}
formatter.{plsql,embedded,js}
autoCloseTags
normalizeBracketColors
Workspace ESLint and Prettier configuration is supported. JavaScript ESLint
configs execute only in trusted workspaces.
Commands
| Command |
Purpose |
PL/SQL: Show Embedded Regions |
List detected regions. |
PL/SQL: Diagnose Setup |
Check the active language, host grammar, settings, and region count. |
PL/SQL: Show Loaded Workspace ESLint Config |
Inspect resolved ESLint configuration. |
Limitations
- Detection is tokenizer-based, not a full PL/SQL parser. Strings nested inside
ordinary helper calls such as
DECODE(...) are intentionally skipped.
- Bare string concatenations outside a recognized call need a language tag:
/*html*/ '<a>' || value || '</a>'.
- Complex multiline or mixed-form interpolation seams may have cosmetic token
coloring differences; diagnostics and IntelliSense still map correctly.
- Quoted call identifiers such as
"HTP"."P"(...) and browser-only virtual
workspaces are not supported.
Privacy
Works entirely offline. No telemetry, network service, or account is required. See
CHANGELOG.md for release details.
Development
npm ci
npm run typecheck
npm run test:all
npm run test:integration
npm run package
License
MIT. Third-party notices are included in
THIRD_PARTY_NOTICES.md.
| |