diff --git a/README.md b/README.md index 9e9f16b..3a9c9b3 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ SELECT DISTINCT name AS function_name FROM functions | is_virtual | Boolean | Return true if a C++ member function or member function template is explicitly declared 'virtual' or if it overrides a virtual method from one of the base classes | | is_pure_virtual | Boolean | Return ture if a C++ member function or member function template is pure virtual. | | is_static | Boolean | Return ture if a C++ member function is static. | +| is_const | Boolean | Return ture if a C++ member function is const. | | has_template | Boolean | True if it's has template | --- diff --git a/src/clang_function_visitor.rs b/src/clang_function_visitor.rs index 2d57ece..93adb60 100644 --- a/src/clang_function_visitor.rs +++ b/src/clang_function_visitor.rs @@ -16,6 +16,7 @@ pub struct FunctionNode { pub is_virtual: bool, pub is_pure_virtual: bool, pub is_static: bool, + pub is_const: bool, pub has_template: bool, } @@ -86,6 +87,7 @@ extern "C" fn visit_children( let mut is_virtual = false; let mut is_pure_virtual = false; let mut is_static = false; + let mut is_const = false; if cursor_kind == CXCursor_CXXMethod { is_method = true; @@ -99,6 +101,7 @@ extern "C" fn visit_children( is_virtual = clang_CXXMethod_isVirtual(cursor) != 0; is_pure_virtual = clang_CXXMethod_isPureVirtual(cursor) != 0; is_static = clang_CXXMethod_isStatic(cursor) != 0; + is_const = clang_CXXMethod_isConst(cursor) != 0; } functions.push(FunctionNode { @@ -111,6 +114,7 @@ extern "C" fn visit_children( is_virtual, is_pure_virtual, is_static, + is_const, has_template, }); diff --git a/src/data_provider.rs b/src/data_provider.rs index 4205de2..d80e8f9 100644 --- a/src/data_provider.rs +++ b/src/data_provider.rs @@ -10,6 +10,7 @@ use gitql_engine::data_provider::DataProvider; use gitql_engine::engine_evaluator::evaluate_expression; use crate::clang_function_visitor; + pub struct ClangAstDataProvider { pub paths: Vec, } @@ -145,6 +146,11 @@ fn select_functions( continue; } + if field_name == "is_const" { + values.push(Value::Boolean(function.is_const)); + continue; + } + if field_name == "has_template" { values.push(Value::Boolean(function.has_template)); continue; diff --git a/src/schema.rs b/src/schema.rs index ab64a72..660d538 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -14,6 +14,7 @@ lazy_static! { map.insert("is_virtual", DataType::Boolean); map.insert("is_pure_virtual", DataType::Boolean); map.insert("is_static", DataType::Boolean); + map.insert("is_const", DataType::Boolean); map.insert("has_template", DataType::Boolean); map }; @@ -34,6 +35,7 @@ lazy_static! { "is_virtual", "is_pure_virtual", "is_static", + "is_const", "has_template", ], );