#file-path #query-language #file #language #ast #syntax-tree #git-ql

app clangql

一个在您的 C/C++ 抽象语法树上运行类似 SQL 查询的工具

7 个版本 (破坏性)

0.7.0 2024 年 8 月 4 日
0.6.0 2024 年 6 月 14 日
0.5.0 2024 年 6 月 12 日
0.4.0 2024 年 6 月 9 日
0.1.0 2024 年 4 月 5 日

#118命令行实用工具

Download history 147/week @ 2024-04-24 26/week @ 2024-05-01 176/week @ 2024-05-08 11/week @ 2024-05-15 4/week @ 2024-05-22 2/week @ 2024-05-29 163/week @ 2024-06-05 289/week @ 2024-06-12 11/week @ 2024-06-19 14/week @ 2024-07-24 92/week @ 2024-07-31 23/week @ 2024-08-07

129 每月下载量

MIT 许可证

61KB
1.5K SLoC

ClangQL - Clang AST 查询语言


Crates.io Deps GitHub issues GitHub

ClangQL 是一个工具,允许您使用 GitQL SDK 在 C/C++ 代码上运行类似 SQL 的查询,而不是数据库文件。

animated


示例

注意,ClangQL 中的所有关键字都是不区分大小写的,类似于 SQL。

SELECT 1
SELECT 1 + 2
SELECT LEN("Clang Query Language")
SELECT "One" IN ("One", "Two", "Three")
SELECT "Clang Query Language" LIKE "%Query%"

SELECT * FROM functions
SELECT COUNT(name) from functions WHERE return_type = "int"
SELECT DISTINCT name AS function_name FROM functions

SELECT * FROM globals
SELECT COUNT(name) from globals WHERE type = "int"
SELECT * FROM globals WHERE is_volatile

表结构

类表
名称 类型 描述
name Text 类变量名
is_struct 布尔值 如果是结构体声明则为真
bases_count 整数 此类的基类数量
methods_count 整数 方法声明数量
fields_count 整数 字段声明数量
size 整数 类的位大小
align 整数 类的位对齐
file Text 文件路径
line 整数 文件路径的行
column 整数 文件路径的列
offset 整数 文件路径的偏移量

枚举表
名称 类型 描述
name Text 枚举名称
constants_count 整数 此枚举中的常量数量
type_literal Text 枚举常量的类型文字
file Text 文件路径
line 整数 文件路径的行
column 整数 文件路径的列
offset 整数 文件路径的偏移量

联合表
名称 类型 描述
name Text 联合名称
size 整数 联合的位大小
fields_count 整数 字段声明数量
file Text 文件路径
line 整数 文件路径的行
column 整数 文件路径的列
offset 整数 文件路径的偏移量

函数表
名称 类型 描述
name Text 函数或方法名称
signature Text 参数和返回类型文字
args_count 整数 参数数量
class_name Text 方法返回类名称
return_type Text 返回类型文字
is_method 布尔值 如果是方法则为真
is_virtual 布尔值 如果是一个 C++ 成员函数或成员函数模板被显式声明为 'virtual' 或如果它覆盖了一个基类中的一个虚方法,则返回 true
is_pure_virtual 布尔值 如果是一个 C++ 成员函数或成员函数模板是纯虚的,则返回 true
is_static 布尔值 如果是一个 C++ 成员函数是静态的,则返回 true
is_const 布尔值 如果是一个 C++ 成员函数是 const 的,则返回 true
has_template 布尔值 如果是模板则为真
access_modifier 整数 返回方法访问控制级别,1 为公共,2 为保护,3 为提供,0 为无效
is_variadic 布尔值 如果函数类型是可变参数的,则为真
file Text 文件路径
line 整数 文件路径的行
column 整数 文件路径的列
offset 整数 文件路径的偏移量

全局变量表
名称 类型 描述
name Text 全局变量名
类型 Text 全局变量类型文字
is_volatile 布尔值 如果变量类型是易失的,则为真
file Text 文件路径
line 整数 文件路径的行
column 整数 文件路径的列
offset 整数 文件路径的偏移量

下载或安装

请注意,从源代码构建或从Cargo.io安装需要安装LibClang 17

  • 从Cargo.io安装
cargo install clangql
  • 从源代码构建
git clone https://github.com/AmrDeveloper/clangql.git
cd clangql
cargo build

运行ClangQL

ClangQL is a SQL like query language to run on local files
Usage: ClangQL [OPTIONS]

Options:
  -f,  --files <paths>        Path for local files to run query on
  -q,  --query <GQL Query>    ClangQL query to run on selected files
  -p,  --pagination           Enable print result with pagination
  -ps, --pagesize             Set pagination page size [default: 10]
  -o,  --output               Set output format [render, json, csv]
  -a,  --analysis             Print Query analysis
  -h,  --help                 Print ClangQL help
  -v,  --version              Print ClangQL Current Version

许可证

MIT License

Copyright (c) 2024 Amr Hesham

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

依赖关系

~6–16MB
~179K SLoC