ast-util中文文档|ast-util js中文教程|解析

npm npmdoc 2年前 (2021-12-31) 533次浏览

ast-util中文文档|ast-util js中文教程|解析

安装命令:npm i ast-util

ast-util

AST 变压器的实用程序。

安装

$ npm install [--save] ast-util

应用程序接口

# callArraySlice ( scope , node [, begin , end ])

返回对Array.prototype.slicewith的调用node作为上下文
beginend作为对 的参数slice

# callFunctionBind ( scope , fn , context [, args ])

返回调用Function.prototype.bindusingcallapply
取决于值
args什么Ifargs是一个表达式 then
apply被使用。如果args是表达式数组,则call.

# callGet范围对象属性接收者

对象上的 [[Get]] 内部方法看起来像
helpers/get.js

# callGetOwnPropertyDescriptor范围对象属性

Object.getOwnPropertyDescriptor使用给定的objectand
返回对 的调用
property

# callGetPrototypeOf范围对象

Object.getPrototypeOf使用给定的返回对 的调用object

# callHasOwnProperty范围节点属性

返回对hasOwnPropertywithnode作为上下文和property要检查的属性的调用

# callSharedMethod ( scope , callee , args )

返回给定的调用calleeargs作为参数。如果callee
是字符串,则将其视为可全局访问的函数,例如
Object.defineProperty将存储在唯一的临时变量中。对该函数的后续调用将重新使用相同的临时变量。

# callSharedMethodWithContext ( scope , callee , context , args )

返回对给定的调用calleecontext作为方法上下文和
args参数。如果callee是字符串,则将其视为可全局访问的函数,例如Array.prototype.slice将存储在唯一的临时变量中。对该函数的后续调用将重新使用相同的临时变量。

# getGlobals ( ast )

获取引用给定 内任何位置的全局变量的标识符列表ast假设 ast 用于此代码:

var a;
function b(){ return c; }
b(d);

然后getGlobals将返回两个标识符,cd

# identifierForString ( string )

为给定的字符串生成一个安全的 JavaScript 标识符。

# 注入共享范围名称表达式

注入具有唯一标识符的共享变量。只有第一次使用相同的scopename将导致创建一个变量声明。expression罐头通过或者是一个AST节点或以生成一个的函数。该函数一般用于注入重复使用的值,防止重复执行。

# 注入变量范围标识符[,初始化])

将具有给定的变量作为具有可选初始值
声明
identifier注入给定scopevar

# isReference (路径)

确定给定path的值是否为值引用。例如,a
b是引用,但c不是:

a(b.c);

只有标识符算作引用。

# isUsed范围名称

确定在给name定的
scope. 对于要使用的名称,它应该:

  1. 在此作用域或父作用域中声明。
  2. 在此范围、父范围或任何子范围中被引用。

例如,abd用于本示例的全局范围,而c不是:

var a;
function b() {}
 
try {
  a = b(d);
} catch (c) {
}

# sharedFor范围名称

通过从虚线路径获取命名值来注入共享变量。例如,这将返回一个可以用来代替命名表达式的标识符:

sharedFor(scope, 'Object.defineProperty')

sharedFor对同一范围内的后续调用将返回相同的标识符。

# uniqueIdentifier范围[,名称])

生成一个标识符,保证不会与给定
scope. 此函数也永远不会scope为其全局范围已经获得该标识符的任何人生成相同的标识符两次

在没有全局引用和变量的范围内调用,第一次调用此函数时,它将返回一个名为 的标识符$__0

如果可能的话,当使用名称调用时,该名称将与前缀“$__”一起使用。如果该名称已被使用,则它会附加递增的数字,直到找到未使用的名称。

用法

这些方法对于源转换很有用,例如转译器或宏。此类转换通常必须将变量插入作用域并替换表达式。使用injectVariableinjectShared专门用于该目的。结合ast-types,这里是您编写swap的简单版本的方法

// var tmp;
var tmp = util.injectVariable(
  this.scope,
  util.uniqueIdentifier(this.scope)
);
 
this.replace(
  b.sequenceExpression([
    // tmp = left
    b.assignmentExpression(
      '=',
      tmp,
      left
    ),
    // left = right
    b.assignmentExpression(
      '=',
      left,
      right
    ),
    // right = tmp
    b.assignmentExpression(
      '=',
      right,
      tmp
    )
  ])
);

有关更完整的示例,请参阅examples/swap-macro.js

贡献

构建状态

设置

首先,安装开发依赖项:

$ npm install

然后,尝试运行测试:

$ make test

如果您要添加或编辑将 helper 注入作用域的代码,则需要编辑并运行 Makefile 以使其从 helpers 中的文件生成 lib/helpers 中的文件。

拉取请求

  1. 分叉吧
  2. 创建您的功能分支 ( git checkout -b my-new-feature)
  3. 提交您的更改 ( git commit -am 'Add some feature')
  4. 推送到分支 ( git push origin my-new-feature)
  5. 创建新的拉取请求

致谢

非常感谢Ben Newman提供的ast-types,这个库的大部分内容都依赖于此。

项目贡献人员列表:


极客公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ast-util中文文档|ast-util js中文教程|解析
喜欢 (0)
.excerpt .focus {display:none}