You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I noticed this issue with ClangTidyCmd but it it is an issue for all the other similar concrete classes (CppcheckCmd, CpplintCmd, IncludeWhatYouUseCmd, etc.).
I am working on a cross-platform C++ repo that has windows/ and linux/ subfolders for implementations on a specific OS. I'm setting up linting. Clang-tidy, as expected, can only process the code for the current system (Linux / Windows). e.g. if I am on Linux and run your hooks with the command pre-commit run --all-files clang-tidy, it will try to parse the Windows files and error out.
Because pre-commit-config.yaml does not take variables, I created a shim script that filters out any files from the wrong folder. For example, if I am on Linux and pre-commit passes some file named foo/windows/bar.cpp in argv, the shim will create a new list without that file and call your hook.
def main() -> int:
"""Filter out filenames from other system implementations and call pocc's clang-tidy hook with the modified args."""
if sys.platform == "win32":
exclude = "linux"
elif sys.platform == "linux":
exclude = "windows"
else:
raise NotImplementedError(f"Not implemented for system: {sys.platform}")
filtered_args = shim_utils.filter_args(exclude, sys.argv)
return hooks.clang_tidy.main(filtered_args)
The issue is that this doesn't work. Clang-tidy is still failing on files shouldn't have been passed to it.
I had a look at utils.py and saw that Command.get_added_files is reading directly from sys.argv instead of the args variable passed in.
My current workaround is to just set sys.argv. scripts/pocc-shim.py:
filtered_args = shim_utils.filter_args(exclude, sys.argv)
sys.argv = filtered_args # set sys.argv as workaround
return hooks.clang_tidy.main(filtered_args)
After this, the hook passes on both systems, properly ignoring files from the excluded folders.
I find this workaround distasteful, but it works fine and is acceptable for my purposes.
However, the underlying issue should still be addressed.
Repro
You can see my code here akfreed/CppSocketsXPlatform@df8ac58. At the moment it is easier to reproduce on Linux. You will need clang-tidy version 13 (I installed with brew).
git clone https://github.com/akfreed/CppSocketsXPlatform.git
cd CppSocketsXPlatform
git checkout df8ac584207130e305de562e01e154407857e2ea
git submodule update --init --recursive
mkdir build && cd build
cmake ..
cd ..
python3 -m venv .venv
. .venv/bin/activate
pip install -U pip
pip install pre-commit
pre-commit run --all-files clang-tidy
Expected result
(.venv) freed@ubuntu20:~/cpp/repro$ pre-commit run --all-files clang-tidy
[INFO] Installing environment for https://github.com/pocc/pre-commit-hooks. [INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
clang-tidy...............................................................Passed
Actual result
it fails on a file under the windows folder
(.venv) freed@ubuntu20:~/cpp/repro$ pre-commit run --all-files clang-tidy
clang-tidy...............................................................Failed
- hook id: clang-tidy - exit code: 1
/home/freed/cpp/repro/StrapperNet/lib/windows/SocketHandle.cpp:25:1: error: constructor does not initialize thes
e fields: m_socketId [cppcoreguidelines-pro-type-member-init,hicpp-member-init,-warnings-as-errors]
SocketHandle::SocketHandle() = default; ^
...
...lots and lots of errors...
...
The text was updated successfully, but these errors were encountered:
I noticed this issue with
ClangTidyCmd
but it it is an issue for all the other similar concrete classes (CppcheckCmd
,CpplintCmd
,IncludeWhatYouUseCmd
, etc.).I am working on a cross-platform C++ repo that has windows/ and linux/ subfolders for implementations on a specific OS. I'm setting up linting. Clang-tidy, as expected, can only process the code for the current system (Linux / Windows). e.g. if I am on Linux and run your hooks with the command
pre-commit run --all-files clang-tidy
, it will try to parse the Windows files and error out.Because pre-commit-config.yaml does not take variables, I created a shim script that filters out any files from the wrong folder. For example, if I am on Linux and pre-commit passes some file named
foo/windows/bar.cpp
in argv, the shim will create a new list without that file and call your hook..pre-commit-config.yaml:
scripts/pocc-shim.py:
The issue is that this doesn't work. Clang-tidy is still failing on files shouldn't have been passed to it.
I had a look at utils.py and saw that
Command.get_added_files
is reading directly fromsys.argv
instead of theargs
variable passed in.My current workaround is to just set sys.argv.
scripts/pocc-shim.py:
After this, the hook passes on both systems, properly ignoring files from the excluded folders.
I find this workaround distasteful, but it works fine and is acceptable for my purposes.
However, the underlying issue should still be addressed.
Repro
You can see my code here akfreed/CppSocketsXPlatform@df8ac58. At the moment it is easier to reproduce on Linux. You will need clang-tidy version 13 (I installed with brew).
OS: Ubuntu 20
Toolchain: (All Ubuntu 20 apt default versions except clang-tidy)
Expected result
Actual result
it fails on a file under the windows folder
The text was updated successfully, but these errors were encountered: