Skip to content

Commit eef3dc2

Browse files
authored
refactor: Add clang-tidy checks (#195)
* chore: Add ament_clang_tidy check for rolling * chore: Add CMAKE_ARGS to enable compile commands in CI workflow * Configure clang-tidy to check naming conventions * Fix naming convention errors * Add misc-include-cleaner check * Enable google checks * Enable other readability checks * Remove cpplint * Enable other misc checks * Reformat * Set clang-tidy jobs to processor count * Fix formatting * Suppress clang-analyzer warning caused by pluginlib * Fix uncrustify for humble * Add ENABLE_CLANG_TIDY option to CMake and update CI * Update CI workflow * Try to use single step for industrial ci
1 parent 7deefe4 commit eef3dc2

24 files changed

Lines changed: 184 additions & 122 deletions

.clang-tidy

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
---
2+
Checks: >
3+
clang-analyzer-*,
4+
-clang-analyzer-optin.cplusplus.VirtualCall,
5+
clang-diagnostic-*,
6+
google-*,
7+
misc-*,
8+
-misc-non-private-member-variables-in-classes,
9+
readability-*,
10+
-readability-identifier-length,
11+
-readability-magic-numbers,
12+
13+
CheckOptions:
14+
misc-include-cleaner.IgnoreHeaders: bits/chrono.h
15+
readability-function-cognitive-complexity.IgnoreMacros: true
16+
readability-identifier-naming.ClassCase: CamelCase
17+
readability-identifier-naming.ClassMemberCase: lower_case
18+
readability-identifier-naming.ConstexprVariableCase: CamelCase
19+
readability-identifier-naming.EnumCase: CamelCase
20+
readability-identifier-naming.EnumConstantCase: CamelCase
21+
readability-identifier-naming.FunctionCase: lower_case
22+
readability-identifier-naming.GlobalConstantCase: CamelCase
23+
readability-identifier-naming.StaticConstantCase: lower_case
24+
readability-identifier-naming.StaticVariableCase: lower_case
25+
readability-identifier-naming.MacroDefinitionCase: UPPER_CASE
26+
readability-identifier-naming.MacroDefinitionIgnoredRegexp: '^[A-Z]+(_[A-Z]+)*_$'
27+
readability-identifier-naming.PrivateMemberCase: lower_case
28+
readability-identifier-naming.ProtectedMemberCase: lower_case
29+
readability-identifier-naming.PublicMemberCase: lower_case
30+
readability-identifier-naming.PrivateMemberSuffix: _
31+
readability-identifier-naming.ProtectedMemberSuffix: _
32+
readability-identifier-naming.PublicMemberSuffix: ''
33+
readability-identifier-naming.NamespaceCase: lower_case
34+
readability-identifier-naming.ParameterCase: lower_case
35+
readability-identifier-naming.TypeAliasCase: CamelCase
36+
readability-identifier-naming.TypedefCase: CamelCase
37+
readability-identifier-naming.VariableCase: lower_case
38+
readability-identifier-naming.IgnoreMainLikeFunctions: true

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ jobs:
2020
env:
2121
ROS_DISTRO: ${{ matrix.ROS_DISTRO }}
2222
ROS_REPO: ${{ matrix.ROS_REPO }}
23+
CMAKE_ARGS: ${{ matrix.ROS_DISTRO == 'rolling' && '-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DENABLE_CLANG_TIDY=ON' || '' }}
2324
steps:
2425
- name: Checkout repo
2526
uses: actions/checkout@v4

CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,17 @@ if(BUILD_TESTING)
165165
)
166166
endif()
167167

168+
option(ENABLE_CLANG_TIDY "Enable ament_clang_tidy test" OFF)
169+
if(ENABLE_CLANG_TIDY)
170+
include(ProcessorCount)
171+
processorcount(N)
172+
set(ament_cmake_clang_tidy_JOBS ${N})
173+
else()
174+
list(APPEND AMENT_LINT_AUTO_EXCLUDE
175+
ament_cmake_clang_tidy
176+
)
177+
endif()
178+
168179
ament_lint_auto_find_test_dependencies()
169180
endif()
170181

include/web_video_server/multipart_stream.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ struct PendingFooter
5656
class MultipartStream
5757
{
5858
public:
59-
MultipartStream(
59+
explicit MultipartStream(
6060
async_web_server_cpp::HttpConnectionPtr & connection,
6161
const std::string & boundary = "boundarydonotcross",
6262
std::size_t max_queue_size = 1);
@@ -77,7 +77,6 @@ class MultipartStream
7777
private:
7878
bool is_busy();
7979

80-
private:
8180
const std::size_t max_queue_size_;
8281
async_web_server_cpp::HttpConnectionPtr connection_;
8382
std::string boundary_;

include/web_video_server/streamers/image_transport_streamer.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,10 @@ class ImageTransportStreamerBase : public StreamerBase
7070

7171
protected:
7272
virtual cv::Mat decode_image(const sensor_msgs::msg::Image::ConstSharedPtr & msg);
73-
virtual void send_image(const cv::Mat &, const std::chrono::steady_clock::time_point & time) = 0;
74-
virtual void initialize(const cv::Mat &);
73+
virtual void send_image(
74+
const cv::Mat & img,
75+
const std::chrono::steady_clock::time_point & time) = 0;
76+
virtual void initialize(const cv::Mat & img);
7577

7678
image_transport::Subscriber image_sub_;
7779
int output_width_;
@@ -81,7 +83,7 @@ class ImageTransportStreamerBase : public StreamerBase
8183
std::string qos_profile_name_;
8284

8385
std::chrono::steady_clock::time_point last_frame_;
84-
cv::Mat output_size_image;
86+
cv::Mat output_size_image_;
8587
std::mutex send_mutex_;
8688

8789
private:

include/web_video_server/streamers/jpeg_streamers.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class MjpegStreamer : public ImageTransportStreamerBase
5959
~MjpegStreamer();
6060

6161
protected:
62-
virtual void send_image(const cv::Mat &, const std::chrono::steady_clock::time_point & time);
62+
virtual void send_image(const cv::Mat & img, const std::chrono::steady_clock::time_point & time);
6363

6464
private:
6565
MultipartStream stream_;
@@ -86,7 +86,7 @@ class JpegSnapshotStreamer : public ImageTransportStreamerBase
8686
~JpegSnapshotStreamer();
8787

8888
protected:
89-
virtual void send_image(const cv::Mat &, const std::chrono::steady_clock::time_point & time);
89+
virtual void send_image(const cv::Mat & img, const std::chrono::steady_clock::time_point & time);
9090

9191
private:
9292
int quality_;

include/web_video_server/streamers/libav_streamer.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ class LibavStreamerBase : public ImageTransportStreamerBase
7878

7979
protected:
8080
virtual void initialize_encoder() = 0;
81-
virtual void send_image(const cv::Mat &, const std::chrono::steady_clock::time_point & time);
82-
virtual void initialize(const cv::Mat &);
81+
virtual void send_image(const cv::Mat & img, const std::chrono::steady_clock::time_point & time);
82+
virtual void initialize(const cv::Mat & img);
8383
AVFormatContext * format_context_;
8484
const AVCodec * codec_;
8585
AVCodecContext * codec_context_;

include/web_video_server/streamers/png_streamers.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class PngStreamer : public ImageTransportStreamerBase
5959
~PngStreamer();
6060

6161
protected:
62-
virtual void send_image(const cv::Mat &, const std::chrono::steady_clock::time_point & time);
62+
virtual void send_image(const cv::Mat & img, const std::chrono::steady_clock::time_point & time);
6363
virtual cv::Mat decode_image(const sensor_msgs::msg::Image::ConstSharedPtr & msg);
6464

6565
private:
@@ -87,7 +87,7 @@ class PngSnapshotStreamer : public ImageTransportStreamerBase
8787
~PngSnapshotStreamer();
8888

8989
protected:
90-
virtual void send_image(const cv::Mat &, const std::chrono::steady_clock::time_point & time);
90+
virtual void send_image(const cv::Mat & img, const std::chrono::steady_clock::time_point & time);
9191
virtual cv::Mat decode_image(const sensor_msgs::msg::Image::ConstSharedPtr & msg);
9292

9393
private:

include/web_video_server/streamers/ros_compressed_streamer.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,15 @@ class RosCompressedStreamer : public StreamerBase
6363

6464
protected:
6565
virtual void send_image(
66-
const sensor_msgs::msg::CompressedImage::ConstSharedPtr msg,
66+
sensor_msgs::msg::CompressedImage::ConstSharedPtr msg,
6767
const std::chrono::steady_clock::time_point & time);
6868

6969
private:
70-
void image_callback(const sensor_msgs::msg::CompressedImage::ConstSharedPtr msg);
70+
void image_callback(sensor_msgs::msg::CompressedImage::ConstSharedPtr msg);
7171
MultipartStream stream_;
7272
rclcpp::Subscription<sensor_msgs::msg::CompressedImage>::SharedPtr image_sub_;
7373
std::chrono::steady_clock::time_point last_frame_;
74-
sensor_msgs::msg::CompressedImage::ConstSharedPtr last_msg;
74+
sensor_msgs::msg::CompressedImage::ConstSharedPtr last_msg_;
7575
std::mutex send_mutex_;
7676
std::string qos_profile_name_;
7777
};
@@ -100,11 +100,11 @@ class RosCompressedSnapshotStreamer : public StreamerBase
100100

101101
protected:
102102
virtual void send_image(
103-
const sensor_msgs::msg::CompressedImage::ConstSharedPtr msg,
103+
sensor_msgs::msg::CompressedImage::ConstSharedPtr msg,
104104
const std::chrono::steady_clock::time_point & time);
105105

106106
private:
107-
void image_callback(const sensor_msgs::msg::CompressedImage::ConstSharedPtr msg);
107+
void image_callback(sensor_msgs::msg::CompressedImage::ConstSharedPtr msg);
108108

109109
rclcpp::Subscription<sensor_msgs::msg::CompressedImage>::SharedPtr image_sub_;
110110
std::string qos_profile_name_;

include/web_video_server/utils.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,6 @@ namespace web_video_server
4242
* @param name The name of the QoS profile name.
4343
* @return An optional containing the matching QoS profile.
4444
*/
45-
std::optional<rmw_qos_profile_t> get_qos_profile_from_name(const std::string name);
45+
std::optional<rmw_qos_profile_t> get_qos_profile_from_name(std::string name);
4646

4747
} // namespace web_video_server

0 commit comments

Comments
 (0)