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 在 命令行实用工具
129 每月下载量
61KB
1.5K SLoC
ClangQL - Clang AST 查询语言
ClangQL 是一个工具,允许您使用 GitQL SDK 在 C/C++ 代码上运行类似 SQL 的查询,而不是数据库文件。
示例
注意,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