Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ESLintプラグインでAST入門

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for oodemi oodemi
May 28, 2016
1.1k

 ESLintプラグインでAST入門

Avatar for oodemi

oodemi

May 28, 2016
Tweet

Transcript

  1. ! ?

  2. AST { "range": [ 0, 25 ], "type": "Program", "body":

    [ { "range": [ 0, 25 ], "type": "VariableDeclaration", "declarations": [ { "range": [ 4, 25 ], "type": "VariableDeclarator", "id": { "range": [ 4, 11 ], "type": "Identifier", "name": "message" }, "init": { "range": [ 14, 25 ], "type": "Literal", "value": "Hello AST", "raw": "\"Hello AST\"" } } ], "kind": "var" } ], "sourceType": "module" }
  3. !

  4. Կͱͳ͘෼͔Δ 4 Ұ෦ൈਮ "type": "VariableDeclarator" // ม਺એݴ "kind": "var" //

    "var"Ͱએݴ͞ΕͯΔ "name": "message" // ม਺໊͸"message" "range": [4, 11] // 4จࣈ໨~11จࣈ໨ "value": "Hello AST" // த਎͸"Hello AST"
  5. no-var.js "use strict"; module.exports = { create: function(context) { return

    { // 1. VariableDeclarationͷnodeʹ౸ୡͨ͠Β࣮ߦ͞ΕΔ VariableDeclaration: function(node) { // 2. var͕࢖ΘΕ͍ͯͨΒΤϥʔϝοηʔδΛදࣔ͢Δ if (node.kind === "var") { context.report(node, "Unexpected var, use let or const instead."); } } }; } };
  6. { "range": [ 6, 27 ], "type": "Program", "body": [

    { "range": [ 6, 27 ], "type": "VariableDeclaration", "declarations": [ { "range": [ 10, 26 ], "type": "VariableDeclarator", "id": { "range": [ 10, 16 ], "type": "Identifier", "name": "status" }, "init": { "range": [ 19, 26 ], "type": "Literal", "value": "Nemui", "raw": "\"Nemui\"" } } ], "kind": "var" } ], "sourceType": "module", "comments": [ { "type": "Line", "value": " ຾͍", "range": [ 0, 5 ] } ] }
  7. no-nemui-comment.js 'use strict'; module.exports = { create: (context) => {

    return { // 1. LineCommentͷ࣌ʹ "LineComment": (node) => { // 2. த਎͕ʮ຾͍ʯͩͬͨΒ if (node.value === "຾͍") { context.report(node, "✘ ;͚ͨ͟ίϝϯτ͸ॻ͔ͳ͍ͰԼ͍͞."); } } }; } };
  8. !