On 2016-08-31 07:55 AM, Thomas Martitz wrote:
Am 31.08.2016 um 16:52 schrieb Lex Trotman:
On 1 September 2016 at 00:43, Thomas Martitz kugel@rockbox.org wrote:
Am 31.08.2016 um 16:39 schrieb Matthew Brush:
I can't speak to all compiler libraries, but at least libclang, libpython and libvala "compile" the source (well just the front-end of the compiler is needed). They literally use the built-in compiler front ends to understand the code. In the case of libclang, it additionally provides helpful methods for performing IDE-related features on the AST, while say with libvala, the ft-plugin would be required to perform it's own analysis of the AST to implement those feaures, which is still a lot less work than in Geany/TM since it has access to the full AST/context and the ft-plugin need not fear encoding language specific semantics into its logic.
How do you pass {C,CXX,CPP}FLAGS to libclang? And where do you get them from?
Libclang needs the full-fat build knowledge that "project" systems on other IDEs provide. Another reason to keep it separate from Geany.
So one would have to adjust the build settings and one or more ft-plugins all the time?
One would have to tell the ft-plugin how to compile the code (where applicable). libclang can read a so-called "compilation-database"[0] which can be generated by CMake[1], Ninja[2], a Make wrapper called Bear[3], or written by hand.
IMO, complex build system integration is out of scope for ft-plugins.
I generally agree, although we could potentially look at improving projects/build commands in the future to some extent, I don't think we should look at it much at this point with ft-plugins.
But I see that not all features can be supported properly without build system.
I don't think they'll usually require a "build system" per se, but they definitively need to be told how to compile the code where applicable.
For libpython, I don't think it needs any flags. For libvala IIRC and libclang (if not using compile_commands.json) they require the `argv` you'd pass to the compiler itself. It may very well be possible for ft-plugins using libraries with the `argv` approach to just grab the compile command from Geany's build commands and convert it back into an `argv` array or something.
Cheers, Matthew Brush
[0]: http://clang.llvm.org/docs/JSONCompilationDatabase.html [1]: https://cmake.org/cmake/help/v3.5/variable/CMAKE_EXPORT_COMPILE_COMMANDS.htm... [2]: https://ninja-build.org/manual.html#_extra_tools [3]: https://github.com/rizsotto/Bear