6个稳定版本
2.1.4 | 2024年2月23日 |
---|---|
2.1.3 | 2024年2月19日 |
2.1.2 | 2023年3月23日 |
2.1.0 | 2023年2月28日 |
#96 in WebAssembly
525KB
13K SLoC
全限定名称
一个名称不能通过定义进一步分解:它是一个原始符号 — 路德维希·维特根斯坦
由 tree-sitter
驱动,fully-qualified-names
允许您从用JavaScript、TypeScript、Python或Java编写的代码中提取简单和全限定名称。这些名称进一步分为声明和用法,这为静态分析提供了对更复杂AST的方便简化。
如何使用
该软件包提供Rust和基于WASM的JS API。要在Rust中从Python代码片段中获取名称,您可以使用以下类似的方法。
use fully-qualified-names::Python;
let code = r#"class Person:
def __init__(self, name):
self.name = name
def hello(self):
return f"Hello, {self.name}"
"#;
let names = Python::find_names(code).unwrap();
println!("{names:?}");
在JS中,它会看起来像这样。
import { Python } from '@aws/fully-qualified-names';
const code = `class Person:
def __init__(self, name):
self.name = name
def hello(self):
return f"Hello, {self.name}"
`;
const names = await Python.findNames(code);
console.log(JSON.stringify(names));
背景
在编程中,标识符用于引用值、类型和代码段。
名称
它们都有简单的名称,这些名称是上下文特定的,以及全限定名称(以下简称FQN),这些名称在项目间是无歧义且唯一的。
例如,以下Rust代码片段。
let list = std::vec::Vec::new();
这里我们有几个简单的名称(list
、std
、vec
、Vec
、new
),包括变量(list
)、模块(std
、vec
)、类型(Vec
)和方法(new
)名称。
所有这些都有FQN,new
方法的FQN明确表示为std::vec::Vec::new
,而list
变量的FQN只能通过了解周围包和模块结构来确定。
声明 -- 用法
上面引入的名称可以进一步分为声明(list
)和用法(std::vec::Vec::new
)
声明:声明是一种语句,它将名称引入一个作用域。
值使用:在需要评估(即查找)符号定义的表达式中使用符号名。
类型使用:类型名由编译器在左侧上下文中使用,以
- 确保右侧上下文中的值具有所需类型
- 避免类型在作用域之间传播/推断
安全
有关更多信息,请参阅CONTRIBUTING。
许可证
本项目采用Apache-2.0许可证。
依赖项
~4-15MB
~381K SLoC