mapbox / cncc Goto Github PK
View Code? Open in Web Editor NEWCustomizable Naming Convention Checker - uses Clang, developed with C++ in mind
License: MIT License
Customizable Naming Convention Checker - uses Clang, developed with C++ in mind
License: MIT License
Examples directory for various / all CursorKinds and how the kinds map to C++ classes, variables, and so on.
Maybe provide a single big C++ file and annotate it based on the AST.
Be more similar to clang-format
in that regard.
Does this mean pip installable nowadays? Investigate this!
Hi I found this project while looking for a regex-based check to clang-tidy for checking a highly non-standard naming convention and I thought I'd give it a go.
I installed:
python 3.8 (win python distribution - i'm running windows)
clang 11.0 (https://pypi.org/project/clang/)
pyyaml 5.3.1 (https://pypi.org/project/PyYAML/)
I have clang 10.0.0 installed aswell and added the libclang.dll to my PATH. Prior to running cncc I also generated a compiler database.
When I run python.exe cncc --style examples\basic.style --dbdir d:\path\to\folder\with\compile\database d:\some\file.c d:\some\other\file.c
I get the following error:
Traceback (most recent call last):
File "cncc", line 44, in
unit = index.parse(f, args=commands)
File "C:\Users\username\Desktop\WPy64-3850\python-3.8.5.amd64\lib\site-packages\clang\cindex.py", line 2721, in parse
return TranslationUnit.from_source(path, args, unsaved_files, options,
File "C:\Users\username\Desktop\WPy64-3850\python-3.8.5.amd64\lib\site-packages\clang\cindex.py", line 2816, in from_source
args_array = (c_char_p * len(args))([b(x) for x in args])
File "C:\Users\username\Desktop\WPy64-3850\python-3.8.5.amd64\lib\site-packages\clang\cindex.py", line 2816, in
args_array = (c_char_p * len(args))([b(x) for x in args])
File "C:\Users\username\Desktop\WPy64-3850\python-3.8.5.amd64\lib\site-packages\clang\cindex.py", line 109, in b
return x.encode('utf8')
AttributeError: 'CompileCommand' object has no attribute 'encode'
I was hoping maybe you could shed a little light on this? The compilation database works fine when using just clang-tidy, so I don't suppose it's corrupt in any way.
First, I ran sudo apt-get install python-yaml
and sudo pip install clang
. Success.
Then I tried:
[dev@ubuntu:~/cncc (master)] $ ls
cncc examples LICENSE MyClass.cpp MyClass.h README.md util
[dev@ubuntu:~/cncc (master)] $ git log -1
commit 4529cb3536c7cec20ea0bb850d0f95e80cded733
Author: Daniel J. Hofmann <[email protected]>
Date: Wed Aug 19 14:55:48 2015 +0200
Respect global style file, closes #5
Local style files do not seem to make a lot sense. What we could do is
walk all parent directories like `clang-format` does, though.
[dev@ubuntu:~/cncc (master)] $ cat MyClass.h
class MyClass{
public:
void init(int a, int b);
int loopAlot();
private:
int var1, var2;
};
[dev@ubuntu:~/cncc (master)] $ cat MyClass.cpp
#include "MyClass.h"
void MyClass::init(int a, int b){
var1 = a;
var2 = b;
}
int MyClass::loopAlot(){
int res = this->var1 + var2;
for(int i=0; i<this->var1; ++i){
res = res + this->var2;
}
return res;
}
[dev@ubuntu:~/cncc (master)] $ ./cncc --style=examples/basic.style MyClass.cpp
Traceback (most recent call last):
File "./cncc", line 22, in <module>
index = I.create()
File "/usr/local/lib/python2.7/dist-packages/clang/cindex.py", line 2119, in create
return Index(conf.lib.clang_createIndex(excludeDecls, 0))
File "/usr/local/lib/python2.7/dist-packages/clang/cindex.py", line 141, in __get__
value = self.wrapped(instance)
File "/usr/local/lib/python2.7/dist-packages/clang/cindex.py", line 3429, in lib
lib = self.get_cindex_library()
File "/usr/local/lib/python2.7/dist-packages/clang/cindex.py", line 3460, in get_cindex_library
raise LibclangError(msg)
clang.cindex.LibclangError: libclang.so: cannot open shared object file: No such file or directory. To provide a path to libclang use Config.set_library_path() or Config.set_library_file().
Any idea what I'm doing wrong?
Hi,
This looks awesome and just like something I could use perfectly and built upon. Do you guys support it and accept PRs and stuff?
Cheers
Test directory with test case C++ programs and style files to validate against.
cncc does not check the ruledb for the kinds the user provides in the styles file --- it's just a subscript-operator dict lookup that fails with a KeyError in case a node kind with such a name is not available.
Example style file:
funX_decl: '.*'
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.