Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ryanzim/ejs-lint
Linter/Syntax Checker for EJS Templates.
https://github.com/ryanzim/ejs-lint
Last synced: 7 days ago
JSON representation
Linter/Syntax Checker for EJS Templates.
- Host: GitHub
- URL: https://github.com/ryanzim/ejs-lint
- Owner: RyanZim
- License: mit
- Created: 2016-04-20T15:20:42.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2024-06-10T00:25:31.000Z (5 months ago)
- Last Synced: 2024-10-19T23:13:16.390Z (17 days ago)
- Language: JavaScript
- Size: 140 KB
- Stars: 253
- Watchers: 6
- Forks: 31
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# EJS-Lint
Linter/Syntax Checker for [EJS Templates](https://github.com/mde/ejs).
This was born out of [mde/ejs #119](https://github.com/mde/ejs/issues/119) and the frustration of the unhelpful errors thrown if you make a simple syntax error inside a scriptlet tag.
## Features
EJS-Lint parses scriptlet tags (`<%`, `%>`, `<%_`, `_%>`, and `-%>`) and expression tags (`<%=` and `<%-`).
**Note:** This linter does not attempt to check for unclosed EJS tags, so if you get an error `Unexpected token` with a line number that doesn't contain any scriptlets, you most likely forgot to close a tag earlier.
It will error out if it encounters an old-style `include`s (`<% include filename %>`) by default, but will tolerate them if the `--preprocessor-include`/`preprocessorInclude` option is set. It does not lint included files regardless of the method of inclusion.
Using `await` inside your ejs template will also throw an error by default - use option `--await`/`await` to allow usage of `await` in the template.
It can work with custom delimiters, just pass it in the options (if using the API) or pass the `--delimiter` (`-d`) flag on the CLI.
## Installation
To install globally, for command-line use:
```bash
npm install -g ejs-lint
```## How it Works
EJS-Lint replaces everything outside a scriptlet tag with whitespace (to retain line & column numbers) and then runs the resulting (hopefully) valid JS through [node-syntax-error](https://github.com/substack/node-syntax-error) to check for errors.
We use [rewire](https://github.com/jhnns/rewire) to load [EJS](https://github.com/mde/ejs). This allows us to access `Template.parseTemplateText()`, an internal function that parses the string and splits it into an array.
**Why can't EJS do this?** At EJS, we try to keep the library lightweight. EJS-Lint uses [acorn](https://github.com/ternjs/acorn) which is too large a dependency for EJS.
## CLI
```
Usage:
ejslint [-d=?]If no file is specified, reads from stdin
Options:
--help Show help [boolean]
--version Show version number [boolean]
-d, --delimiter Specify a custom delimiter ( i.e. instead of <% ) [string]
--preprocessor-include Allow old (pre-EJS v3) preprocessor-style includes [boolean]
--await Allow usage of await inside template [boolean]
```## API
Require:
```js
const ejsLint = require('ejs-lint');
```Then do `ejsLint(text, options)`; where `text` is the EJS template and `options` are the EJS options (can additionally set `preprocessorInclude` to
allow for old-style includes or set `await` to allow usage of await inside the template).
This returns a [node-syntax-error object](https://github.com/substack/node-syntax-error#attributes) that you can parse.## License
MIT