name
- non-npm package →
@salesforce/foo(whether published or not) - vscode-extension package →
salesforcedx-vscode-foo - don't rename; flag mismatches to the user
types
- extension: needed only if it's an extensionDependency of another extension
- non-extension package: not needed
browser
- web-enabled extensions only; must point to a bundled dist file
files
- packages that publish to npm need a
filesprop
scripts
See wireit skill
dependencies
- another package in this repo → version
* - no dependency on salesforcedx-vscode-services (extensionDependency / devDependency ok)
devDependencies
- don't duplicate devDependencies already at repo top level
packaging
- legacy vsce script (mutates pjson at package time); don't create new ones, want them gone
vscode "contributes"
tips
commandsshow in command palette by default; suppress vianever/whenundercommandPalette- command titles (
%key%→package.nls.json), menus, notification slots: command-ui - commands need a unique ID; 2 extensions with the same config → UI warning
- never a
default:trueboolean config (hard to override user/workspace)
ESLint rules
Rules from @salesforce/eslint-plugin-vscode-extensions (packages/eslint-local-rules; published to npm) enforce good package.json:
package-json-i18n-descriptions: Requires%key%placeholders (not hardcoded strings) in commands, config, debuggers, views, walkthroughs. Validates keys exist inpackage.nls.jsonpackage-json-extension-icon: Published VS Code extensions (salesforcedx-vscode*) must have top-levelicon; icon path must exist when specifiedpackage-json-icon-paths: Validatescommands[*].iconandviewsContainers.activitybar[*].iconhave bothlight/darkand files existpackage-json-command-refs: Menu commands must reference defined commands; reports orphaned commandspackage-json-view-refs: View IDs must be referenced in menuwhenclauses orviewsWelcome; reports orphaned views