Configuration & Troubleshooting

Customize SFCC completion contexts and diagnose missing types, references, or CodeLens without a tsconfig setup

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.completionsDefault contexts
routesURLUtils.url/abs/http/https, corresponding method-name matches, and URLAction; argument 0
hooks.namecallHook, hasHook, hooksHelper, hookHelper; argument 0
hooks.functioncallHook, hooksHelper, hookHelper; argument 1
templatesrender and renderTemplate; argument 0. sendEmail; argument 1
resources.propertiesmsg and msgf; argument 0
resources.bundlesmsg 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. A configured array replaces the setting's default array, so retain the defaults you want:

settings.json
{
  "intellij-sfcc.completions.routes": [
    { "className": "URLUtils", "methods": ["url", "abs", "http", "https"], "paramIndex": 0 },
    { "methods": ["url", "abs", "http", "https"], "paramIndex": 0 },
    { "methods": ["URLAction"], "paramIndex": 0 },
    { "className": "links", "methods": ["forRoute"], "paramIndex": 1 }
  ]
}

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 actionWhat 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 SuggestManually open completion at the caret
Trigger Parameter HintsReopen signature help inside a function call
Go to Definition / Peek DefinitionInspect a definition without depending on a particular keybinding
Go to ReferencesInspect 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

SymptomLikely next check
dw/* types are missing everywhereLanguage mode, extension activation, and language-server startup
require('*/…') resolves to an unexpected fileActive cartridge order and discovered cartridge locations
A parent export is missing on baseMatching relative file in a later cartridge, plus the parent's actual exports
product.custom lacks a project attributeLocal XML, its type-id, generated declarations, and the receiver's type
server.forms.getForm('name') has no known fieldsForm XML name, cartridge discovery, and generated form-types.d.ts
A hook implementation parameter is untypedRegistration, script path, export name, and whether a known hook signature exists
A resource reference is missingBundle name, key spelling, and whether the lookup is statically recognizable
Script-symbol rename or a refactoring does not applyThese are not completed scripting workflows in this release; see Diagnostics.

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.

On this page