[PATCH] D67025: Add .inl as valid C++ header type
Wasim Abbas via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 30 15:54:00 PDT 2019
abbaswasim created this revision.
Herald added subscribers: cfe-commits, kadircet, ilya-biryukov.
Herald added a project: clang.
`clangd` doesn't consider `.inl` a valid C++ source (https://github.com/clangd/clangd/issues/16#issuecomment-512942589) this pull request adds support for that.
Until the `export` keyword is supported by compilers mentioned https://stackoverflow.com/questions/5416872/using-export-keyword-with-templates a common way of keeping header files cleaner is to move template definitions into `.inl` files. This seems to be a common practice. Some evidence of it being commonly used for this purpose.
https://www.randygaul.net/2015/01/31/c-keyword-inline-and-inl-files/
https://drake.mit.edu/cxx_inl.html
https://www.codeproject.com/Articles/48575/How-to-define-a-template-class-in-a-h-file-and-imp
https://stackoverflow.com/questions/31949731/very-confused-on-template-inl-file
even brdf-loader https://github.com/rgl-epfl/brdf-loader
Some other ways of separating definitions is https://github.com/RobotLocomotion/drake/issues/3141 where they say you should use .inl or .impl or -inl.h or -impl.h and this might be ok but then things like projectile can't find it because that only works with extensions.
One caveat of this is, the above methods of using `.inl` files means its not a complete translation unit so `clangd` still can't fully compile it so one has to add `#include "header.hpp"` at the top of `.inl` files to make it work but thats not a big deal.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D67025
Files:
clang/lib/Driver/Types.cpp
Index: clang/lib/Driver/Types.cpp
===================================================================
--- clang/lib/Driver/Types.cpp
+++ clang/lib/Driver/Types.cpp
@@ -237,6 +237,7 @@
.Case("cp", TY_CXX)
.Case("cu", TY_CUDA)
.Case("hh", TY_CXXHeader)
+ .Case("inl", TY_CXXHeader)
.Case("ii", TY_PP_CXX)
.Case("ll", TY_LLVM_IR)
.Case("mi", TY_PP_ObjC)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D67025.218180.patch
Type: text/x-patch
Size: 433 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190830/d58bed86/attachment.bin>
More information about the cfe-commits
mailing list