msforest / notebook

好记性不如烂笔头,记录知识的点点滴滴。
https://github.com/msforest/notebook/wiki
0 stars 0 forks source link

抽象语法树例子 #38

Open msforest opened 3 years ago

msforest commented 3 years ago

var esprima = require('esprima')
var estraverse = require('estraverse')
var escodegen = require('escodegen')

var fs = require('fs')
var path = require('path')

// 保留注释
function update(filename) {
  var code = fs.readFileSync(filename, 'utf8')
  var ast = esprima.parseModule(code, {
    tokens: true,
    comment: true,
    range: true,
  })
  ast = escodegen.attachComments(ast, ast.comments, ast.tokens)
  estraverse.traverse(ast, {
    enter(node) {
      if (node.type === 'ImportDeclaration') {
        node.source.value = ''
      }
    }
  })
  var newCode = escodegen.generate(ast, {
    format: {
      indent: {
        adjustMulfilineComment: true
      }
    },
    comment: true
  })

  fs.writeFileSync(filename, newCode)
}

function travel(dir) {
  if (fs.statSync(dir).isFile()) {
    return update(dir)
  }

  var dirs = fs.readdirSync(dir)
  dirs.forEach((file) => {
    var pathname = path.join(dir, file)
    if(fs.statSync(pathname).isDirector()) {
      travel(pathname)
    } else {
      update(pathname)
    }
  })
}