Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AP_Scripting: add luacheck lua linter CI, and fix all current warnings #22887

Merged
merged 9 commits into from Feb 15, 2023

Conversation

IamPete1
Copy link
Member

@IamPete1 IamPete1 commented Feb 9, 2023

Adds a luacheck config and then uses that as part of CI meaning CI will fail for bad lua. EG these are all the warnings on current master Total: 1105 warnings / 0 errors in 127 files

Not a complete check yet as this currently ignores globals, some extra config is needed to tell luacheck about the extra bindings we have. #15014

I have fixed all the warnings in our current scripts. Mostly by just fixing them but in some-cases adding -- luacheck: ignore. I have globally turned off some white space checks, and a line length check. I have not tested any of the fixes, if there is a desire for significant testing I would prefer that we just add ignores everywhere and then fix them one at a time as we update scripts.

Luacheck docs: https://luacheck.readthedocs.io/en/stable/index.html

You can run locally with luacheck */ --config libraries/AP_Scripting/tests/luacheck.lua to check everything. Or for example luacheck libraries/AP_Scripting/examples/simple_loop.lua --config libraries/AP_Scripting/tests/luacheck.lua to check a particular file.

@IamPete1
Copy link
Member Author

IamPete1 commented Feb 9, 2023

Result:

Checking libraries/AP_HAL_ChibiOS/hwdef/CubeOrange-joey/scripts/mode.lua OK
Checking libraries/AP_HAL_ChibiOS/hwdef/HerePro/scripts/hereproled.lua OK
Checking libraries/AP_Scripting/applets/Aerobatics/FixedWing/RateBased/sport_aerobatics.lua OK
Checking libraries/AP_Scripting/applets/Aerobatics/FixedWing/plane_aerobatics.lua OK
Checking libraries/AP_Scripting/applets/Gimbal_Camera_Mode.lua OK
Checking libraries/AP_Scripting/applets/Heli_IM_COL_Tune.lua OK
Checking libraries/AP_Scripting/applets/Hexsoon LEDs.lua OK
Checking libraries/AP_Scripting/applets/MissionSelector.lua OK
Checking libraries/AP_Scripting/applets/ONVIF_Camera_Control.lua OK
Checking libraries/AP_Scripting/applets/QuadPlane_Low_Alt_FW_mode_prevention.lua OK
Checking libraries/AP_Scripting/applets/Script_Controller.lua OK
Checking libraries/AP_Scripting/applets/SmartAudio.lua OK
Checking libraries/AP_Scripting/applets/VTOL-quicktune.lua OK
Checking libraries/AP_Scripting/applets/forward_flight_motor_shutdown.lua OK
Checking libraries/AP_Scripting/applets/motor_failure_test.lua OK
Checking libraries/AP_Scripting/applets/plane_package_place.lua OK
Checking libraries/AP_Scripting/applets/plane_ship_landing.lua OK
Checking libraries/AP_Scripting/applets/runcam_on_arm.lua OK
Checking libraries/AP_Scripting/docs/docs.lua     OK
Checking libraries/AP_Scripting/drivers/EFI_HFE.lua OK
Checking libraries/AP_Scripting/drivers/EFI_SkyPower.lua OK
Checking libraries/AP_Scripting/drivers/mount-djirs2-driver.lua OK
Checking libraries/AP_Scripting/examples/6DoF_roll_pitch.lua OK
Checking libraries/AP_Scripting/examples/AHRS_switch.lua OK
Checking libraries/AP_Scripting/examples/CAN_MiniCheetah_drive.lua OK
Checking libraries/AP_Scripting/examples/CAN_read.lua OK
Checking libraries/AP_Scripting/examples/CAN_write.lua OK
Checking libraries/AP_Scripting/examples/EFI_tester.lua OK
Checking libraries/AP_Scripting/examples/LED_matrix_image.lua OK
Checking libraries/AP_Scripting/examples/LED_matrix_text.lua OK
Checking libraries/AP_Scripting/examples/LED_poslight.lua OK
Checking libraries/AP_Scripting/examples/LED_roll.lua OK
Checking libraries/AP_Scripting/examples/Mission_test.lua OK
Checking libraries/AP_Scripting/examples/MotorMatrix_fault_tolerant_hex.lua OK
Checking libraries/AP_Scripting/examples/MotorMatrix_setup.lua OK
Checking libraries/AP_Scripting/examples/Motor_mixer_dynamic_setup.lua OK
Checking libraries/AP_Scripting/examples/Motors_6DoF.lua OK
Checking libraries/AP_Scripting/examples/NMEA-decode.lua OK
Checking libraries/AP_Scripting/examples/OOP_example.lua OK
Checking libraries/AP_Scripting/examples/RCIN_test.lua OK
Checking libraries/AP_Scripting/examples/RC_override.lua OK
Checking libraries/AP_Scripting/examples/SN-GCJA5-particle-sensor.lua OK
Checking libraries/AP_Scripting/examples/Safety_States.lua OK
Checking libraries/AP_Scripting/examples/Serial_Dump.lua OK
Checking libraries/AP_Scripting/examples/UART_log.lua OK
Checking libraries/AP_Scripting/examples/active_source_set.lua OK
Checking libraries/AP_Scripting/examples/ahrs-print-angle-and-rates.lua OK
Checking libraries/AP_Scripting/examples/ahrs-print-home-and-origin.lua OK
Checking libraries/AP_Scripting/examples/ahrs-print-variances.lua OK
Checking libraries/AP_Scripting/examples/ahrs-set-home-to-vehicle-location.lua OK
Checking libraries/AP_Scripting/examples/ahrs-set-origin.lua OK
Checking libraries/AP_Scripting/examples/ahrs-source-gps-optflow.lua OK
Checking libraries/AP_Scripting/examples/ahrs-source-gps-wheelencoders.lua OK
Checking libraries/AP_Scripting/examples/ahrs-source.lua OK
Checking libraries/AP_Scripting/examples/analog_input_and_GPIO.lua OK
Checking libraries/AP_Scripting/examples/arming-check-batt-temp.lua OK
Checking libraries/AP_Scripting/examples/arming-check-wp1-takeoff.lua OK
Checking libraries/AP_Scripting/examples/aux_cached.lua OK
Checking libraries/AP_Scripting/examples/button_test.lua OK
Checking libraries/AP_Scripting/examples/copter-circle-speed.lua OK
Checking libraries/AP_Scripting/examples/copter-deadreckon-home.lua OK
Checking libraries/AP_Scripting/examples/copter-fast-descent.lua OK
Checking libraries/AP_Scripting/examples/copter-fly-vertical-circle.lua OK
Checking libraries/AP_Scripting/examples/copter-nav-script-time.lua OK
Checking libraries/AP_Scripting/examples/copter-wall-climber.lua OK
Checking libraries/AP_Scripting/examples/copter_alt_offset.lua OK
Checking libraries/AP_Scripting/examples/copy_userdata.lua OK
Checking libraries/AP_Scripting/examples/easter-egg.lua OK
Checking libraries/AP_Scripting/examples/esc_rpm_scale.lua OK
Checking libraries/AP_Scripting/examples/frsky_battery.lua OK
Checking libraries/AP_Scripting/examples/frsky_rpm.lua OK
Checking libraries/AP_Scripting/examples/frsky_wp.lua OK
Checking libraries/AP_Scripting/examples/fw_vtol_failsafe.lua OK
Checking libraries/AP_Scripting/examples/gen_control.lua OK
Checking libraries/AP_Scripting/examples/get_notify_RGB.lua OK
Checking libraries/AP_Scripting/examples/hello_world.lua OK
Checking libraries/AP_Scripting/examples/i2c_scan.lua OK
Checking libraries/AP_Scripting/examples/lidar_control.lua OK
Checking libraries/AP_Scripting/examples/logging.lua OK
Checking libraries/AP_Scripting/examples/mag_heading.lua OK
Checking libraries/AP_Scripting/examples/message_interval.lua OK
Checking libraries/AP_Scripting/examples/mission-edit-demo.lua OK
Checking libraries/AP_Scripting/examples/mission-load.lua OK
Checking libraries/AP_Scripting/examples/mission-save.lua OK
Checking libraries/AP_Scripting/examples/mount-poi.lua OK
Checking libraries/AP_Scripting/examples/mount-test.lua OK
Checking libraries/AP_Scripting/examples/opendog_demo.lua OK
Checking libraries/AP_Scripting/examples/orbit_follow.lua OK
Checking libraries/AP_Scripting/examples/param_add.lua OK
Checking libraries/AP_Scripting/examples/param_get_set_test.lua OK
Checking libraries/AP_Scripting/examples/plane-doublets.lua OK
Checking libraries/AP_Scripting/examples/plane-wind-failsafe.lua OK
Checking libraries/AP_Scripting/examples/plane-wind-fs.lua OK
Checking libraries/AP_Scripting/examples/plane_guided_follow.lua OK
Checking libraries/AP_Scripting/examples/protected_call.lua OK
Checking libraries/AP_Scripting/examples/proximity_test.lua OK
Checking libraries/AP_Scripting/examples/quadruped.lua OK
Checking libraries/AP_Scripting/examples/rangefinder_test.lua OK
Checking libraries/AP_Scripting/examples/relay_control.lua OK
Checking libraries/AP_Scripting/examples/rgb_led_test.lua OK
Checking libraries/AP_Scripting/examples/rgb_notify_patterns.lua OK
Checking libraries/AP_Scripting/examples/rover-MinFixType.lua OK
Checking libraries/AP_Scripting/examples/rover-SaveTurns.lua OK
Checking libraries/AP_Scripting/examples/rover-TerrainDetector.lua OK
Checking libraries/AP_Scripting/examples/rover-motor-driver.lua OK
Checking libraries/AP_Scripting/examples/rover-set-steering-and-throttle.lua OK
Checking libraries/AP_Scripting/examples/rover-set-turn-rate.lua OK
Checking libraries/AP_Scripting/examples/serial_test.lua OK
Checking libraries/AP_Scripting/examples/servo_scan.lua OK
Checking libraries/AP_Scripting/examples/servo_set_get.lua OK
Checking libraries/AP_Scripting/examples/set-angle.lua OK
Checking libraries/AP_Scripting/examples/set-target-location.lua OK
Checking libraries/AP_Scripting/examples/set-target-velocity.lua OK
Checking libraries/AP_Scripting/examples/set_target_posvel_circle.lua OK
Checking libraries/AP_Scripting/examples/ship_vel_match.lua OK
Checking libraries/AP_Scripting/examples/simple_loop.lua OK
Checking libraries/AP_Scripting/examples/smbus-check-cycles.lua OK
Checking libraries/AP_Scripting/examples/terrain_warning.lua OK
Checking libraries/AP_Scripting/examples/test_load.lua OK
Checking libraries/AP_Scripting/examples/winch-test.lua OK
Checking libraries/AP_Scripting/examples/wp_test.lua OK
Checking libraries/AP_Scripting/tests/luacheck.lua OK
Checking libraries/AP_Scripting/tests/math.lua    OK
Checking libraries/AP_Scripting/tests/scripting_test.lua OK
Checking libraries/AP_Scripting/tests/strings.lua OK
Checking modules/waf/demos/lua/foo.lua            OK

Total: 0 warnings / 0 errors in 126 files

@@ -727,7 +727,7 @@ function update()
end

-- send rate target
local roll_degs, pitch_degs, yaw_degs, yaw_is_ef = mount:get_rate_target(MOUNT_INSTANCE)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

aha! this is a real bug because we should be using this. I will create a fix although I'm happy for this to go in as well.

@rmackay9
Copy link
Contributor

rmackay9 commented Feb 9, 2023

I'm sure this will annoy some developers but it is also really useful to have these checks run. I think it will lead to less bugs in our scripts.

Copy link
Contributor

@khancyr khancyr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not used to lua, but from safety and CI that looks nice!

@IamPete1
Copy link
Member Author

IamPete1 commented Feb 10, 2023

We should ignore this one too: Checking modules/waf/demos/lua/foo.lua Although it is passing at the moment, so it dons't make any difference.

@IamPete1
Copy link
Member Author

added that extra ignore.

Copy link
Contributor

@tridge tridge left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe a comment like this:

-- LUACHECK

and only check files with that marker?

.github/workflows/test_scripting.yml Outdated Show resolved Hide resolved
@IamPete1 IamPete1 force-pushed the lua_CI branch 4 times, most recently from bd9b5b9 to 44a9cfe Compare February 14, 2023 03:28
@IamPete1 IamPete1 force-pushed the lua_CI branch 6 times, most recently from 6f19cdc to 8d565de Compare February 14, 2023 04:02
@IamPete1
Copy link
Member Author

IamPete1 commented Feb 14, 2023

After a good deal of messing about I now have this working without using the magic using actions helper. It does fail correctly.

This still checks everything, however stuff that has not been fixed adds -- luacheck: only 0 This means that it only checks for errors. So we get some protection without having changes since everything is currently error free. It also means that anything new must be both error and warning free. This also means that we don't need to do any manual parsing, just run one command and done.

@tridge tridge merged commit 5dde76b into ArduPilot:master Feb 15, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants