ast-util中文文档|ast-util js中文教程|解析
ast-util
AST 变压器的实用程序。
安装
$ npm install [--save] ast-util
应用程序接口
# callArraySlice ( scope , node [, begin , end ])
返回对Array.prototype.slice
with的调用node
作为上下文
begin
和end
作为对 的参数slice
。
# callFunctionBind ( scope , fn , context [, args ])
返回调用Function.prototype.bind
usingcall
或apply
取决于值args
是什么。Ifargs
是一个表达式 then
apply
被使用。如果args
是表达式数组,则call
.
# callGet(范围,对象,属性,接收者)
对象上的 [[Get]] 内部方法看起来像
helpers/get.js。
# callGetOwnPropertyDescriptor(范围、对象、属性)
Object.getOwnPropertyDescriptor
使用给定的object
and
返回对 的调用property
。
# callGetPrototypeOf(范围,对象)
Object.getPrototypeOf
使用给定的返回对 的调用object
。
# callHasOwnProperty(范围、节点、属性)
返回对hasOwnProperty
withnode
作为上下文和property
要检查的属性的调用。
# callSharedMethod ( scope , callee , args )
返回给定的调用callee
与args
作为参数。如果callee
是字符串,则将其视为可全局访问的函数,例如
Object.defineProperty
将存储在唯一的临时变量中。对该函数的后续调用将重新使用相同的临时变量。
# callSharedMethodWithContext ( scope , callee , context , args )
返回对给定的调用callee
,context
作为方法上下文和
args
参数。如果callee
是字符串,则将其视为可全局访问的函数,例如Array.prototype.slice
将存储在唯一的临时变量中。对该函数的后续调用将重新使用相同的临时变量。
# getGlobals ( ast )
获取引用给定 内任何位置的全局变量的标识符列表ast
。假设 ast 用于此代码:
var a;{ return c; };
然后getGlobals
将返回两个标识符,c
和d
。
# identifierForString ( string )
为给定的字符串生成一个安全的 JavaScript 标识符。
# 注入共享(范围,名称,表达式)
注入具有唯一标识符的共享变量。只有第一次使用相同的scope
和name
将导致创建一个变量声明。的expression
罐头通过或者是一个AST节点或以生成一个的函数。该函数一般用于注入重复使用的值,防止重复执行。
# 注入变量(范围,标识符[,初始化])
将具有给定的变量作为具有可选初始值的
声明identifier
注入给定。scope
var
# isReference (路径)
确定给定path
的值是否为值引用。例如,a
和
b
是引用,但c
不是:
;
只有标识符算作引用。
# isUsed(范围,名称)
确定在给name
定的
scope
. 对于要使用的名称,它应该:
- 在此作用域或父作用域中声明。
- 在此范围、父范围或任何子范围中被引用。
例如,a
、b
和d
用于本示例的全局范围,而c
不是:
var a; {} try a = ; catch c
# sharedFor(范围,名称)
通过从虚线路径获取命名值来注入共享变量。例如,这将返回一个可以用来代替命名表达式的标识符:
sharedFor
对同一范围内的后续调用将返回相同的标识符。
# uniqueIdentifier(范围[,名称])
生成一个标识符,保证不会与给定
scope
. 此函数也永远不会scope
为其全局范围已经获得该标识符的任何人生成相同的标识符两次。
在没有全局引用和变量的范围内调用,第一次调用此函数时,它将返回一个名为 的标识符$__0
。
如果可能的话,当使用名称调用时,该名称将与前缀“$__”一起使用。如果该名称已被使用,则它会附加递增的数字,直到找到未使用的名称。
用法
这些方法对于源转换很有用,例如转译器或宏。此类转换通常必须将变量插入作用域并替换表达式。使用injectVariable
和injectShared
专门用于该目的。结合ast-types
,这里是您编写swap
宏的简单版本的方法:
// var tmp;var tmp = util; this;
有关更完整的示例,请参阅examples/swap-macro.js。
贡献
设置
首先,安装开发依赖项:
$ npm install
然后,尝试运行测试:
$ make test
如果您要添加或编辑将 helper 注入作用域的代码,则需要编辑并运行 Makefile 以使其从 helpers 中的文件生成 lib/helpers 中的文件。
拉取请求
- 分叉吧
- 创建您的功能分支 (
git checkout -b my-new-feature
) - 提交您的更改 (
git commit -am 'Add some feature'
) - 推送到分支 (
git push origin my-new-feature
) - 创建新的拉取请求
致谢
非常感谢Ben Newman提供的ast-types,这个库的大部分内容都依赖于此。