From 9c5119c922a13178208869157120b1d8222081c6 Mon Sep 17 00:00:00 2001 From: HuSenlin Date: Fri, 15 Aug 2025 16:12:50 +0800 Subject: [PATCH] show all rules in statistic report Issue: https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/ICTKGZ Signed-off-by: HuSenlin --- ets2panda/linter/src/cli/CommandLineParser.ts | 30 +--------------- ets2panda/linter/src/cli/LinterCLI.ts | 2 ++ .../scan/ProblemStatisticsCommonFunction.ts | 35 ++++++++++++++---- .../scan/StatisticsReportInPutInfo.ts | 1 + .../utils/functions/ConfiguredRulesProcess.ts | 36 +++++++++++++++++++ 5 files changed, 68 insertions(+), 36 deletions(-) diff --git a/ets2panda/linter/src/cli/CommandLineParser.ts b/ets2panda/linter/src/cli/CommandLineParser.ts index 5da3f81929..83d0e13743 100644 --- a/ets2panda/linter/src/cli/CommandLineParser.ts +++ b/ets2panda/linter/src/cli/CommandLineParser.ts @@ -22,7 +22,7 @@ import type { CommandLineOptions } from '../lib/CommandLineOptions'; import { cookBookTag } from '../lib/CookBookMsg'; import { Logger } from '../lib/Logger'; import { ARKTS_IGNORE_DIRS_OH_MODULES } from '../lib/utils/consts/ArktsIgnorePaths'; -import { getConfiguredRuleTags, getRulesFromConfig } from '../lib/utils/functions/ConfiguredRulesProcess'; +import { getConfiguredRuleTags, getConfigureRulePath, getRulesFromConfig } from '../lib/utils/functions/ConfiguredRulesProcess'; import { extractRuleTags } from '../lib/utils/functions/CookBookUtils'; import { logTscDiagnostic } from '../lib/utils/functions/LogTscDiagnostic'; @@ -212,34 +212,6 @@ function processRuleConfig(commandLineOptions: CommandLineOptions, options: Opti commandLineOptions.linterOptions.ruleConfigTags = getConfiguredRuleTags(arkTSRulesMap, configuredRulesMap); } -function getConfigureRulePath(options: OptionValues): string { - if (!options.ruleConfig) { - return getDefaultConfigurePath(); - } - const stats = fs.statSync(path.normalize(options.ruleConfig)); - if (!stats.isFile()) { - Logger.error(`The file at ${options.ruleConfigPath} path does not exist! - And will use the default configure rule`); - return getDefaultConfigurePath(); - } - return options.ruleConfig; -} - -function getDefaultConfigurePath(): string { - const defaultConfigPath = path.join(process.cwd(), 'rule-config.json'); - try { - fs.accessSync(defaultConfigPath, fs.constants.F_OK); - } catch (error: any) { - if (error.code === 'ENOENT') { - Logger.error( - 'The default rule configuration file does not exist, please add the file named rule-config.json in the migration-helper folder!' - ); - process.exit(1); - } - } - return defaultConfigPath; -} - function processAutofixRuleConfig(commandLineOptions: CommandLineOptions, options: OptionValues): void { if (options.ruleConfig) { return; diff --git a/ets2panda/linter/src/cli/LinterCLI.ts b/ets2panda/linter/src/cli/LinterCLI.ts index b0851047c3..9d8ae8337f 100644 --- a/ets2panda/linter/src/cli/LinterCLI.ts +++ b/ets2panda/linter/src/cli/LinterCLI.ts @@ -32,6 +32,7 @@ import { logStatistics } from '../lib/statistics/StatisticsLogger'; import { compileLintOptions, getEtsLoaderPath } from '../lib/ts-compiler/Compiler'; import { processSyncErr, processSyncOut } from '../lib/utils/functions/ProcessWrite'; import { parseCommandLine } from './CommandLineParser'; +import { getwholeRules } from '../lib/utils/functions/ConfiguredRulesProcess'; export function run(): void { const commandLineArgs = process.argv.slice(2); @@ -77,6 +78,7 @@ async function runIdeInteractiveMode(cmdOptions: CommandLineOptions): Promise, ruleToAutoFixedNumbersMap: Map ): void { + const regex = /.*\(([^)]+)\)[^(]*$/; problems.forEach((problem) => { if (problem.rule !== undefined) { - if (problem.autofix) { - const currentNumber = ruleToAutoFixedNumbersMap.get(problem.rule) || 0; - ruleToAutoFixedNumbersMap.set(problem.rule, currentNumber + 1); + const match = problem.rule.match(regex); + if (match?.[1]?.trim()) { + if (problem.autofix) { + const currentNumber = ruleToAutoFixedNumbersMap.get(match[1]) || 0; + ruleToAutoFixedNumbersMap.set(match[1], currentNumber + 1); + } + const currentNumber = ruleToNumbersMap.get(match[1]) || 0; + ruleToNumbersMap.set(match[1], currentNumber + 1); } - const currentNumber = ruleToNumbersMap.get(problem.rule) || 0; - ruleToNumbersMap.set(problem.rule, currentNumber + 1); } }); } @@ -148,7 +153,7 @@ export async function generateScanProbelemStatisticsReport( workLoadInfo.calculateFixRate(problemNumbers); const statisticsReportData = getProblemStatisticsInfo( problemNumbers, - statisticsReportInPutInfo.ruleToNumbersMap, + getProcessedRuleToNumbersMap(statisticsReportInPutInfo.ruleToNumbersMap, statisticsReportInPutInfo.wholeRules), statisticsReportInPutInfo.ruleToAutoFixedNumbersMap, statisticsReportInPutInfo.timeRecorder, workLoadInfo @@ -160,6 +165,22 @@ export async function generateScanProbelemStatisticsReport( ); } +function getProcessedRuleToNumbersMap(ruleToNumbersMap: Map, wholeLinterRules: string[]) : Map { + const processedRuleToNumbersMap: Map = new Map(); + const homecheckRuleToNumbersMap: Map = ruleToNumbersMap; + wholeLinterRules.forEach((ruleName) => { + const ruleNumber = ruleToNumbersMap.get(ruleName) || 0; + homecheckRuleToNumbersMap.delete(ruleName); + processedRuleToNumbersMap.set(ruleName, ruleNumber); + }); + + homecheckRuleToNumbersMap.forEach((number, ruleName) => { + processedRuleToNumbersMap.set(ruleName, number); + }) + + return processedRuleToNumbersMap; +} + export function generateMigrationStatisicsReport( lintResult: LintRunResult, timeRecorder: TimeRecorder, @@ -192,7 +213,7 @@ export function generateMigrationStatisicsReport( const statisticsReportData = getProblemStatisticsInfo( problemNumbers, - ruleToNumbersMap, + getProcessedRuleToNumbersMap(ruleToNumbersMap, getwholeRules()), ruleToAutoFixedNumbersMap, timeRecorder ); diff --git a/ets2panda/linter/src/lib/statistics/scan/StatisticsReportInPutInfo.ts b/ets2panda/linter/src/lib/statistics/scan/StatisticsReportInPutInfo.ts index 377f0843ff..b43198f2fe 100644 --- a/ets2panda/linter/src/lib/statistics/scan/StatisticsReportInPutInfo.ts +++ b/ets2panda/linter/src/lib/statistics/scan/StatisticsReportInPutInfo.ts @@ -20,6 +20,7 @@ export class StatisticsReportInPutInfo { totalProblemNumbers: number = 0; arkOnePointOneProblemNumbers: number = 0; ruleToNumbersMap: Map = {} as Map; + wholeRules: string[] = [] as string[]; ruleToAutoFixedNumbersMap: Map = {} as Map; cmdOptions: CommandLineOptions = {} as CommandLineOptions; timeRecorder: TimeRecorder = {} as TimeRecorder; diff --git a/ets2panda/linter/src/lib/utils/functions/ConfiguredRulesProcess.ts b/ets2panda/linter/src/lib/utils/functions/ConfiguredRulesProcess.ts index 99e6c5da6f..65ee056abc 100644 --- a/ets2panda/linter/src/lib/utils/functions/ConfiguredRulesProcess.ts +++ b/ets2panda/linter/src/lib/utils/functions/ConfiguredRulesProcess.ts @@ -14,6 +14,8 @@ */ import * as fs from 'node:fs'; import * as path from 'node:path'; +import type { OptionValues } from 'commander'; +import { Logger } from '../../../lib/Logger'; export function getConfiguredRuleTags( arkTSRulesMap: Map, @@ -48,6 +50,34 @@ export function getRulesFromConfig(configRulePath: string): Map): Map { const resultMap: Map = new Map(); for (const [key, value] of inputMap) { @@ -66,3 +96,9 @@ function isStringArray(value: any): value is string[] { }) ); } + +export function getwholeRules() : string[] { + const configureRulePath = getDefaultConfigurePath(); + const configuredRulesMap = getRulesFromConfig(configureRulePath); + return Array.from(configuredRulesMap.values()).flat(); +} -- Gitee