Skip to content

JoernBerkefeld/eslint-plugin-sfmc

Repository files navigation

eslint-plugin-sfmc

Unified ESLint plugin for Salesforce Marketing Cloud — linting rules for both AMPscript and Server-Side JavaScript (SSJS).

Installation

npm install eslint-plugin-sfmc --save-dev

Requires ESLint 9+ (flat config).

Quick Start

// eslint.config.js
import sfmc from 'eslint-plugin-sfmc';

export default [
  // Lint standalone .ampscript/.amp and .ssjs files
  ...sfmc.configs.recommended,

  // Lint AMPscript + SSJS embedded in .html files
  ...sfmc.configs.embedded,
];

Configs

Config Files What it does
sfmc.configs.ampscript **/*.ampscript, **/*.amp AMPscript rules only (recommended severity)
sfmc.configs.ssjs **/*.ssjs SSJS rules only (recommended severity)
sfmc.configs.recommended Both of the above All rules at recommended severity for standalone files
sfmc.configs.embedded **/*.html Combined processor extracts both languages from HTML
sfmc.configs.strict All of the above + HTML All rules at error severity for standalone and embedded

recommended, embedded, and strict are arrays — spread them with ....

AMPscript Rules (amp-*)

Rule Default Description
sfmc/amp-no-unknown-function error Disallow calls to unknown AMPscript functions
sfmc/amp-function-arity error Enforce correct argument counts
sfmc/amp-set-requires-target error Require set to have a target variable
sfmc/amp-no-smart-quotes error Disallow smart/curly quotes in strings
sfmc/amp-no-var-redeclaration warn Disallow re-declaring a variable with var
sfmc/amp-no-empty-block warn Disallow empty %%[ ]%% blocks
sfmc/amp-no-loop-counter-assign warn Disallow assigning to the for loop counter
sfmc/amp-no-inline-statement warn Disallow statements inside inline expressions
sfmc/amp-no-deprecated-function warn Flag deprecated functions and suggest replacements
sfmc/amp-naming-convention warn Enforce variable naming convention
sfmc/amp-no-empty-then warn Disallow IF with empty THEN branch
sfmc/amp-require-rowcount-check warn Require RowCount check before FOR on LookupRows
sfmc/amp-no-html-comment warn Disallow HTML comments inside AMPscript blocks
sfmc/amp-no-js-line-comment warn Disallow JS-style // line comments in AMPscript
sfmc/amp-no-nested-script-tag error Disallow <script> tags nested inside AMPscript script tags
sfmc/amp-no-nested-ampscript-delimiter error Disallow AMPscript delimiters nested inside AMPscript blocks
sfmc/amp-prefer-attribute-value off Prefer AttributeValue() over bare personalization
sfmc/amp-require-variable-declaration off Require var before set
sfmc/amp-no-email-excluded-function off Flag functions unavailable in email context

SSJS Rules (ssjs-*)

Rule Default Description
sfmc/ssjs-require-platform-load error Require Platform.Load("core") before Core usage
sfmc/ssjs-no-unsupported-syntax error Flag ES6+ syntax not supported by SFMC
sfmc/ssjs-no-unknown-platform-function error Disallow unknown Platform.Function.* methods
sfmc/ssjs-platform-function-arity error Enforce correct arity for Platform.Function.*
sfmc/ssjs-no-unknown-http-method error Disallow unknown HTTP.* methods
sfmc/ssjs-no-unknown-platform-variable error Disallow unknown Platform.Variable.* methods
sfmc/ssjs-no-unknown-platform-response error Disallow unknown Platform.Response.* methods
sfmc/ssjs-no-unknown-platform-request error Disallow unknown Platform.Request.* methods
sfmc/ssjs-require-platform-load-order error Require Platform.Load() before Core usage in order
sfmc/ssjs-no-hardcoded-credentials error Flag hardcoded keys in encryption calls
sfmc/ssjs-no-unknown-platform-client-browser error Disallow unknown Platform.ClientBrowser.* methods
sfmc/ssjs-no-unknown-core-method warn Disallow unknown methods on Core library objects
sfmc/ssjs-no-unknown-wsproxy-method warn Disallow unknown WSProxy methods
sfmc/ssjs-cache-loop-length warn Require caching .length in for-loops
sfmc/ssjs-require-hasownproperty warn Require hasOwnProperty guard in for-in loops
sfmc/ssjs-prefer-platform-load-version warn Enforce a minimum Platform.Load version string
sfmc/ssjs-no-unavailable-method warn Flag Array/String methods unavailable or broken in SFMC's ES3 engine
sfmc/ssjs-prefer-parsejson-safe-arg warn Require string coercion on ParseJSON argument
sfmc/ssjs-no-switch-default warn Disallow default clause in switch statements
sfmc/ssjs-no-treatascontent-injection warn Flag dynamic string concatenation in TreatAsContent calls

Processors

Processor Purpose
sfmc/ampscript Extract %%[ ]%%, %%= =%%, <script language="ampscript">
sfmc/ssjs Extract <script runat="server"> (non-ampscript)
sfmc/sfmc Combined: extracts both AMPscript and SSJS from HTML

License

MIT