From 6ebc54179f29e11308ffd649176fc00592b64bfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=9F=BA=E9=AD=81?= <1412414664@qq.com> Date: Sun, 7 Jun 2026 14:02:07 +0800 Subject: [PATCH] fix(lint): mark truncated parse fallbacks --- src/cmds/go/golangci_cmd.rs | 17 +++++++++++++++-- src/cmds/python/ruff_cmd.rs | 15 ++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/cmds/go/golangci_cmd.rs b/src/cmds/go/golangci_cmd.rs index 865b9b8b0..788705a8a 100644 --- a/src/cmds/go/golangci_cmd.rs +++ b/src/cmds/go/golangci_cmd.rs @@ -4,7 +4,8 @@ use crate::core::config; use crate::core::runner; use crate::core::stream::exec_capture; use crate::core::truncate::CAP_WARNINGS; -use crate::core::utils::{resolved_command, truncate}; +use crate::core::utils::resolved_command; +use crate::parser::truncate_output; use anyhow::Result; use serde::Deserialize; use std::collections::HashMap; @@ -271,7 +272,7 @@ pub(crate) fn filter_golangci_json(output: &str, version: u32) -> String { return format!( "golangci-lint (JSON parse failed: {})\n{}", e, - truncate(output, config::limits().passthrough_max_chars) + truncate_output(output, config::limits().passthrough_max_chars) ); } }; @@ -431,6 +432,18 @@ mod tests { assert!(result.contains("utils.go")); } + #[test] + fn test_filter_golangci_parse_failure_marks_truncated_passthrough() { + let long_invalid_json = "{".repeat(crate::core::config::limits().passthrough_max_chars + 20); + let result = filter_golangci_json(&long_invalid_json, 2); + + assert!(result.contains("golangci-lint (JSON parse failed:")); + assert!( + result.contains("[RTK:PASSTHROUGH] Output truncated"), + "parse fallback should make truncation visible, got:\n{result}" + ); + } + #[test] fn test_compact_path() { assert_eq!( diff --git a/src/cmds/python/ruff_cmd.rs b/src/cmds/python/ruff_cmd.rs index f8a512035..2b9f55e67 100644 --- a/src/cmds/python/ruff_cmd.rs +++ b/src/cmds/python/ruff_cmd.rs @@ -4,6 +4,7 @@ use crate::core::config; use crate::core::runner; use crate::core::truncate::CAP_WARNINGS; use crate::core::utils::{resolved_command, truncate}; +use crate::parser::truncate_output; use anyhow::Result; use serde::Deserialize; use std::collections::HashMap; @@ -101,7 +102,7 @@ pub fn filter_ruff_check_json(output: &str) -> String { return format!( "Ruff check (JSON parse failed: {})\n{}", e, - truncate(output, config::limits().passthrough_max_chars) + truncate_output(output, config::limits().passthrough_max_chars) ); } }; @@ -387,6 +388,18 @@ mod tests { assert!(result.contains("1:8"), "line:col location missing"); } + #[test] + fn test_filter_ruff_check_parse_failure_marks_truncated_passthrough() { + let long_invalid_json = "{".repeat(crate::core::config::limits().passthrough_max_chars + 20); + let result = filter_ruff_check_json(&long_invalid_json); + + assert!(result.contains("Ruff check (JSON parse failed:")); + assert!( + result.contains("[RTK:PASSTHROUGH] Output truncated"), + "parse fallback should make truncation visible, got:\n{result}" + ); + } + #[test] fn test_filter_ruff_format_all_formatted() { let output = "5 files left unchanged";