eslint-plugin-yml
Version:
This ESLint plugin provides linting rules for YAML.
65 lines (64 loc) • 2.34 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const index_1 = require("../utils/index");
const compat_1 = require("../utils/compat");
exports.default = (0, index_1.createRule)("file-extension", {
meta: {
docs: {
description: "enforce YAML file extension",
categories: [],
extensionRule: false,
layout: false,
},
schema: [
{
type: "object",
properties: {
extension: {
enum: ["yaml", "yml"],
},
caseSensitive: {
type: "boolean",
},
},
additionalProperties: false,
},
],
messages: {
unexpected: `Expected extension '{{expected}}' but used extension '{{actual}}'.`,
},
type: "suggestion",
},
create(context) {
var _a, _b, _c, _d;
const sourceCode = (0, compat_1.getSourceCode)(context);
if (!((_a = sourceCode.parserServices) === null || _a === void 0 ? void 0 : _a.isYAML)) {
return {};
}
const expected = ((_b = context.options[0]) === null || _b === void 0 ? void 0 : _b.extension) || "yaml";
const caseSensitive = (_d = (_c = context.options[0]) === null || _c === void 0 ? void 0 : _c.caseSensitive) !== null && _d !== void 0 ? _d : true;
return {
Program(node) {
const filename = (0, compat_1.getFilename)(context);
const actual = path_1.default.extname(filename);
if ((caseSensitive ? actual : actual.toLocaleLowerCase()) ===
`.${expected}`) {
return;
}
context.report({
node,
loc: node.loc.start,
messageId: "unexpected",
data: {
expected: `.${expected}`,
actual,
},
});
},
};
},
});