The language server configures its SFCC type model automatically. The settings below customize editor behavior and recognized helper calls; they are not prerequisites for basic API completion
Teach completion about your helpers
A completion rule identifies a method name, an optional receiver name, and the zero-based argument position containing an SFCC identifier
Setting under intellij-sfcc.completions | Default contexts |
|---|---|
routes | URLUtils.url/abs/http/https, corresponding method-name matches, and URLAction; argument 0 |
hooks.name | callHook, hasHook, hooksHelper, hookHelper; argument 0 |
hooks.function | callHook, hooksHelper, hookHelper; argument 1 |
templates | render and renderTemplate; argument 0. sendEmail; argument 1 |
resources.properties | msg and msgf; argument 0 |
resources.bundles | msg and msgf; argument 1 |
For example, suppose a helper accepts a site identifier followed by a route:
links.forRoute('DemoSite', 'Product-Show');Add a route rule with className: "links", methods: ["forRoute"], and paramIndex: 1. Route rules you add are tried first and the default route rules stay on after them, so the array holds only your own rule:
{
"intellij-sfcc.completions.routes": [
{ "className": "links", "methods": ["forRoute"], "paramIndex": 1 }
]
}The other settings work differently: a configured array replaces the setting's default array, so retain the defaults you want in it
Invoke completion inside the second string argument. The definition provider also uses these context rules for recognized route, hook, template, key, and bundle lookups. A rule identifies a syntactic call shape; it does not teach the server what arbitrary helper code does at runtime
Editor visibility settings
| VS Code setting or action | What it controls |
|---|---|
Editor: Code Lens (editor.codeLens) | Whether CodeLens actions are visible |
Editor: Inlay Hints Enabled (editor.inlayHints.enabled) | Whether supplied inlay hints are displayed |
| Trigger Suggest | Manually open completion at the caret |
| Trigger Parameter Hints | Reopen signature help inside a function call |
| Go to Definition / Peek Definition | Inspect a definition without depending on a particular keybinding |
| Go to References | Inspect references from the current symbol or recognized identifier |
Use the Command Palette names if your keyboard layout or keybindings differ from the shortcuts in these guides
Diagnose a missing result
Check the language mode
Open the file and inspect the language indicator. Cartridge server scripts should use the SFCC JavaScript, SFCC TypeScript, or Digital Script mode. Files under frontend client or static folders intentionally use the normal frontend service
Check cartridge discovery
Confirm the cartridge is linked or discovered in the extension's cartridge view. Open the workspace containing it, rather than only an unrelated file. See Zero configuration
Check the active context
An overlay import and module.superModule depend on cartridge order. Confirm the selected site scope and the locally available cartridge path before treating a different target as a navigation defect
Check the feature's source
A custom attribute needs local metadata; a form needs its XML; a hook needs its registration; log lenses need loaded log data. Open the source file and confirm its identifier matches the code
Let indexing finish and retry
Large project changes can temporarily leave specialized results unavailable. Save the relevant files, allow indexing to finish, then invoke the editor action explicitly. Inspect the extension's Output entries if the result remains missing
Common symptoms
| Symptom | Likely next check |
|---|---|
dw/* types are missing everywhere | Language mode, extension activation, and language-server startup |
require('*/…') resolves to an unexpected file | Active cartridge order and discovered cartridge locations |
A parent export is missing on base | Matching relative file in a later cartridge, plus the parent's actual exports |
product.custom lacks a project attribute | Local XML, its type-id, generated declarations, and the receiver's type |
server.forms.getForm('name') has no known fields | Form XML name, cartridge discovery, and generated form-types.d.ts |
| A hook implementation parameter is untyped | Registration, script path, export name, and whether a known hook signature exists |
| A resource reference is missing | Bundle name, key spelling, and whether the lookup is statically recognizable |
| Script-symbol rename or a refactoring does not apply | These are not completed scripting workflows in this release; see Diagnostics. ISML template variables do rename, see Rename a template variable |
Output channels
Open View → Output and pick a channel from the list to see what the extension recorded:
| Output channel | What it records |
|---|---|
| Intellij SFCC Script Language Server | The scripting language server behind completion, navigation, diagnostics, and CodeLens |
| Intellij SFCC ISML Language Server | The ISML language server |
| Intellij SFCC Logs Server | The server that parses instance logs for Log Center |
| B2C TypeScript Transpiler | The folder transpiled files are saved in, each .ts file with its generated .js file, and transpile errors |
| B2C Sync Log | File watcher starts and stops, uploads, deploys, and upload errors, tagged with the instance |
| B2C Logs Streaming | Warnings from Log Center, for example when a log watch could not stop or logs could not refresh |
If a language server cannot start or keeps stopping, a notification says so and offers Try again, Show log to open that server's channel, and links to support
JSON schemas
The extension validates and completes these JSON files as you edit them:
| File | Checked against |
|---|---|
hooks.json | A hooks array whose entries need name and script |
steptypes.json | A single step-types object describing job steps |
caches.json | A caches array whose entries need an id, with optional expireAfterSeconds |
api.json under a rest-apis folder | An endpoints array whose entries need endpoint, schema, and implementation |
cartridge/experience/pages/**/*.json | Page Designer page type: region_definitions, attribute groups, and supported aspects |
cartridge/experience/components/**/*.json | Page Designer component type: group, region_definitions, and attribute_definition_groups |
cartridge/experience/aspects/**/*.json | Page Designer aspect type: name, attribute_definitions, and supported_object_types |
cartridge/experience/editors/**/*.json | Page Designer custom editor type and its resources |
Useful information for a reproducible report
Include the extension version, language mode, a minimal source example, expected and actual navigation targets, and the relevant cartridge order. For metadata or form issues, include a small synthetic XML definition. For UI issues, capture the editor action and its result with readable file names
A small two-cartridge example is usually more useful than a whole storefront. Keep credentials and private business data out of the sample