Skip to content

抽象语法树例子 #38

@msforest

Description

@msforest
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)
    }
  })
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions