Skip to content

jrrdnx/expressionengine

Repository files navigation

ExpressionEngine language features for VS Code

  • Enables syntax highlighting for tags, variables, comments, conditionals, and strings without overwriting HTML and PHP code syntax highlighting
  • Adds code completion (suggestions) for tags, global variables, and tag parameters including third party addons!
  • Auto-closing tags and variables

feature X

Settings

  • expressionengine.suggest.basic: enable/disable language suggestions (tags and variables). Default: true
  • expressionengine.autoClosingTags: enable/disable auto closing ExpressionEngine tags and variables. Default: true
  • expressionengine.thirdPartyAddonPath: path to your third party extensions directory. Default: ${rootPath}/httpdocs/system/user/addons/
    • Include a ${rootPath} variable to be substituted with the file path of the workspace (e.g. ${rootPath}/httpdocs/system/user/addons/ becomes /Users/Development/Project/httpdocs/system/user/addons/)

Customizing Colors

To add or override your current theme's colors, add an editor.tokenColorCustomizations rule to your User Settings. E.g.

{
  "editor.tokenColorCustomizations": {
    "textMateRules": [
      {
        "scope": "entity.name.tag.expressionengine",
        "settings": {
          "foreground": "#70adec"
        }
      },
      {
        "scope": "keyword.operator.expressionengine",
        "settings": {
          "foreground": "#f16060"
        }
      },
      {
        "scope": "variable.parameter.expressionengine",
        "settings": {
          "foreground": "#d19a66"
        }
      }
    ]
  }
}

As of v0.0.4 the following naming conventions are used:

  • entity.name.tag.expressionengine: any tag beginning with {exp:
  • variable.parameter.expressionengine: tag parameters such as channel or entry_id used with channel entries tags, name for layout tags, etc.
  • variable.other.expressionengine: variable-type tags such as {layout:set}, {embed}, {current_time}, etc.
  • comment.block.expressionengine: comment blocks ({!-- --})
  • keyword.control.expressionengine: {if} conditionals
  • keyword.operator.expressionengine: all conditional operators defined in the Template Language documentation
  • string.quoted.single.expressionengine: single-quoted strings
  • string.quoted.double.expressionengine: double-quoted strings

Release Notes

See the CHANGELOG

Third party addon suggestions

In order for third party addon suggestions to be included, each addon must include an addon.json file in its root folder. While other information can be included, the completion provider is looking specifically for a tags property and a variables property:

{
  "tags": {
    "exp:channel:entries": {
      "documentation": "Short tag description...",
      "hasClosingTag": true,
      "parameters": {
        "name": {
          "documentation": "Short parameter description...",
          "detail": "Type: string",
        },
        "path": {
          "documentation": "Short parameter description...",
          "detail": "Type: string",
        }
      }
    }
  },
  "variables": {
    "current_time": {
      "documentation": "Short variable description...",
      "parameters": {
        "format": {
          "documentation": "Short parameter description...",
          "detail": "Type: string",
        }
      }
    }
  },
}
  • The tags and variables properties are both objects
  • Each tag/variable is a property of that respective object, with its value also an object
  • The documentation property is a string with a short description of that tag/variable
  • If the tag/variable has a closing tag, include the hasClosingTag property with a value of true. This enables the auto-closing tag feature (if the expressionengine.autoClosingTags setting is set to true). If there is no closing tag, this can be set to false or excluded completely.
  • If the tag/variable has any parameters, include a parameters property
  • Each parameter is a property of the parameters property, with its own documentation property featuring a short description
  • Parameters may also include a detail property with shorthand information regarding the type of value it's looking for, whether or not it's required, default value(s), etc. Newlines can be forced using "\n":
    • "detail": "Type: string|list\nValues: 'desc|asc'\nDefault: 'desc'",

Attributions

Many thanks to @adrum for help in debugging the initial parameter suggestions and the third party addon suggestions, as well as continued help with all things Node/npm

Disclaimer

The ExpressionEngine mark is owned and may be registered by EllisLab, Inc. This VS Code extension is an independent project and has not been authorized, sponsored, or otherwise approved by EllisLab, Inc.

About

ExpressionEngine language features for VS Code

Resources

License

Stars

Watchers

Forks

Packages

No packages published