AST и
плагины:
давайте
пошалим!

AST?

AST Visualizer
QRCODE cо ссылкой

https://goo.gl/8rM1cf

$ mkdir eslint-plugin-demoforfix
$ cd eslint-plugin-demoforfix
$ npm init
// package.json
{
  "name": "eslint-plugin-demoforfix",
  "version": "1.0.0",
  "main": "no-string-classname.js",
}
// no-string-classname.js
module.exports = {
  rules: {
      "no-string-classname": {
          create: function (context) {
            return {…}
}}}};
context.report({
  message,
  node,
  //…
});
return {
  "JSXAttribute": function (node) {
    // …
  }
}
if ((node.name.name === 'className')
  && (node.value.type === 'Literal')) {
  context.report({
    node,
    message: 'You should use 
    css modules instead'
  });
}
$ npm version minor
$ npm publish
$ npm i -D eslint-plugin-demoforfix
// .eslintrc
{
  "rules": {
    "demoforfix/no-string-classname": 2
  },
  "plugins": [
    "demoforfix"
  ],
}
$ sudo npm install -g yo
$ sudo npm install -g generator-eslint
$ mkdir eslint-plugin-demoforfix
$ cd eslint-plugin-demoforfix
$ yo eslint:plugin
$ npm i
// package.json
{
  "name": "eslint-plugin-demoforfix",
  "version": "1.0.0",
  "main": "lib/index.js",
}
var requireIndex = 
  require("requireindex");
module.exports.rules = 
  requireIndex(__dirname + "/rules");
// no-string-classname.js
module.exports = {
  rules: {
    "no-string-classname": {
        create: function (context) {
          return {…}
}}}};
// no-string-classname.js
module.exports = {
  meta: {…},
  "no-string-classname": {
      create: function (context) {
        return {…}
}}};
const rule = 
  require("../../../lib/rules/no-string-classname");
const RuleTester = require("eslint").RuleTester;
const parserOptions = {
  ecmaVersion: 2018,
  sourceType: 'module',
  ecmaFeatures: {jsx: true}};
const ruleTester = 
  new RuleTester({parserOptions});
ruleTester.run(
  "no-string-classname", 
  rule, {
  valid: [{…}, {…}],
  invalid: [{…}, {…}],
});
{ 
  code: '…'
}
{ code: '…',
errors: [{
    message: "You should use 
      css modules instead",
    type: "JSXAttribute"
}]}
$ npm t
ESLint Developer Documentation
QRCODE cо ссылкой

https://goo.gl/RpEUbq

Антон Немцев

skype: ravencry

QRCODE cо ссылкой на доклад

https://goo.gl/Uk7NHL