126 lines
4.4 KiB
JavaScript
126 lines
4.4 KiB
JavaScript
/**
|
|
* @fileoverview Markdown plugin.
|
|
* @author Brandon Mills
|
|
*/
|
|
//-----------------------------------------------------------------------------
|
|
// Imports
|
|
//-----------------------------------------------------------------------------
|
|
import { processor } from "./processor.js";
|
|
import { MarkdownLanguage } from "./language/markdown-language.js";
|
|
import { MarkdownSourceCode } from "./language/markdown-source-code.js";
|
|
import recommendedRules from "./build/recommended-config.js";
|
|
import rules from "./build/rules.js";
|
|
//-----------------------------------------------------------------------------
|
|
// Type Definitions
|
|
//-----------------------------------------------------------------------------
|
|
/**
|
|
* @import { ConfigObject, RulesConfig } from "@eslint/core";
|
|
*/
|
|
//-----------------------------------------------------------------------------
|
|
// Exports
|
|
//-----------------------------------------------------------------------------
|
|
/** @satisfies {RulesConfig} */
|
|
const processorRulesConfig = {
|
|
// The Markdown parser automatically trims trailing
|
|
// newlines from code blocks.
|
|
"eol-last": "off",
|
|
// In code snippets and examples, these rules are often
|
|
// counterproductive to clarity and brevity.
|
|
"no-undef": "off",
|
|
"no-unused-expressions": "off",
|
|
"no-unused-vars": "off",
|
|
"padded-blocks": "off",
|
|
// Adding a "use strict" directive at the top of every
|
|
// code block is tedious and distracting. The config
|
|
// opts into strict mode parsing without the directive.
|
|
strict: "off",
|
|
// The processor will not receive a Unicode Byte Order
|
|
// Mark from the Markdown parser.
|
|
"unicode-bom": "off",
|
|
};
|
|
let recommendedPlugins, processorPlugins;
|
|
const plugin = {
|
|
meta: {
|
|
name: "@eslint/markdown",
|
|
version: "8.0.3", // x-release-please-version
|
|
},
|
|
processors: {
|
|
markdown: processor,
|
|
},
|
|
languages: {
|
|
commonmark: new MarkdownLanguage({ mode: "commonmark" }),
|
|
gfm: new MarkdownLanguage({ mode: "gfm" }),
|
|
},
|
|
rules,
|
|
configs: {
|
|
"recommended-legacy": {
|
|
plugins: ["markdown"],
|
|
overrides: [
|
|
{
|
|
files: ["*.md"],
|
|
processor: "markdown/markdown",
|
|
},
|
|
{
|
|
files: ["**/*.md/**"],
|
|
parserOptions: {
|
|
ecmaFeatures: {
|
|
// Adding a "use strict" directive at the top of
|
|
// every code block is tedious and distracting, so
|
|
// opt into strict mode parsing without the
|
|
// directive.
|
|
impliedStrict: true,
|
|
},
|
|
},
|
|
rules: {
|
|
...processorRulesConfig,
|
|
},
|
|
},
|
|
],
|
|
},
|
|
recommended: [
|
|
{
|
|
name: "markdown/recommended",
|
|
files: ["**/*.md"],
|
|
language: "markdown/commonmark",
|
|
plugins: (recommendedPlugins = {}),
|
|
rules: recommendedRules,
|
|
},
|
|
],
|
|
processor: /** @type {ConfigObject[]} */ ([
|
|
{
|
|
name: "markdown/recommended/plugin",
|
|
plugins: (processorPlugins = {}),
|
|
},
|
|
{
|
|
name: "markdown/recommended/processor",
|
|
files: ["**/*.md"],
|
|
processor: "markdown/markdown",
|
|
},
|
|
{
|
|
name: "markdown/recommended/code-blocks",
|
|
files: ["**/*.md/**"],
|
|
languageOptions: {
|
|
parserOptions: {
|
|
ecmaFeatures: {
|
|
// Adding a "use strict" directive at the top of
|
|
// every code block is tedious and distracting, so
|
|
// opt into strict mode parsing without the
|
|
// directive.
|
|
impliedStrict: true,
|
|
},
|
|
},
|
|
},
|
|
rules: {
|
|
...processorRulesConfig,
|
|
},
|
|
},
|
|
]),
|
|
},
|
|
};
|
|
Object.assign(recommendedPlugins, { markdown: plugin });
|
|
Object.assign(processorPlugins, { markdown: plugin });
|
|
export default plugin;
|
|
export { MarkdownSourceCode };
|
|
export * from "./language/markdown-language.js";
|
|
export * from "./types.js";
|