@flanksource/clicky-ui 0.3.49 → 0.3.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/connections/ConnectionsPage.cjs +219 -0
- package/dist/connections/ConnectionsPage.cjs.map +1 -0
- package/dist/connections/ConnectionsPage.d.ts +23 -0
- package/dist/connections/ConnectionsPage.d.ts.map +1 -0
- package/dist/connections/ConnectionsPage.js +219 -0
- package/dist/connections/ConnectionsPage.js.map +1 -0
- package/dist/connections/connectionActionStatus.cjs +43 -0
- package/dist/connections/connectionActionStatus.cjs.map +1 -0
- package/dist/connections/connectionActionStatus.d.ts +5 -0
- package/dist/connections/connectionActionStatus.d.ts.map +1 -0
- package/dist/connections/connectionActionStatus.js +43 -0
- package/dist/connections/connectionActionStatus.js.map +1 -0
- package/dist/connections/connectionActionTypes.cjs +24 -0
- package/dist/connections/connectionActionTypes.cjs.map +1 -0
- package/dist/connections/connectionActionTypes.d.ts +36 -0
- package/dist/connections/connectionActionTypes.d.ts.map +1 -0
- package/dist/connections/connectionActionTypes.js +24 -0
- package/dist/connections/connectionActionTypes.js.map +1 -0
- package/dist/connections/connectionActions.cjs +11 -0
- package/dist/connections/connectionActions.cjs.map +1 -0
- package/dist/connections/connectionActions.d.ts +15 -0
- package/dist/connections/connectionActions.d.ts.map +1 -0
- package/dist/connections/connectionActions.js +11 -0
- package/dist/connections/connectionActions.js.map +1 -0
- package/dist/connections/connectionDashboard.cjs +185 -0
- package/dist/connections/connectionDashboard.cjs.map +1 -0
- package/dist/connections/connectionDashboard.d.ts +25 -0
- package/dist/connections/connectionDashboard.d.ts.map +1 -0
- package/dist/connections/connectionDashboard.js +185 -0
- package/dist/connections/connectionDashboard.js.map +1 -0
- package/dist/connections/connectionDashboardModel.cjs +43 -0
- package/dist/connections/connectionDashboardModel.cjs.map +1 -0
- package/dist/connections/connectionDashboardModel.d.ts +75 -0
- package/dist/connections/connectionDashboardModel.d.ts.map +1 -0
- package/dist/connections/connectionDashboardModel.js +43 -0
- package/dist/connections/connectionDashboardModel.js.map +1 -0
- package/dist/connections/connectionDashboardRenderer.cjs +21 -0
- package/dist/connections/connectionDashboardRenderer.cjs.map +1 -0
- package/dist/connections/connectionDashboardRenderer.d.ts +15 -0
- package/dist/connections/connectionDashboardRenderer.d.ts.map +1 -0
- package/dist/connections/connectionDashboardRenderer.js +21 -0
- package/dist/connections/connectionDashboardRenderer.js.map +1 -0
- package/dist/connections/connectionDashboardRow.cjs +169 -0
- package/dist/connections/connectionDashboardRow.cjs.map +1 -0
- package/dist/connections/connectionDashboardRow.d.ts +12 -0
- package/dist/connections/connectionDashboardRow.d.ts.map +1 -0
- package/dist/connections/connectionDashboardRow.js +169 -0
- package/dist/connections/connectionDashboardRow.js.map +1 -0
- package/dist/connections/connectionErrorView.cjs +8 -0
- package/dist/connections/connectionErrorView.cjs.map +1 -0
- package/dist/connections/connectionErrorView.d.ts +4 -0
- package/dist/connections/connectionErrorView.d.ts.map +1 -0
- package/dist/connections/connectionErrorView.js +8 -0
- package/dist/connections/connectionErrorView.js.map +1 -0
- package/dist/connections/connectionHealth.cjs +82 -0
- package/dist/connections/connectionHealth.cjs.map +1 -0
- package/dist/connections/connectionHealth.d.ts +33 -0
- package/dist/connections/connectionHealth.d.ts.map +1 -0
- package/dist/connections/connectionHealth.js +82 -0
- package/dist/connections/connectionHealth.js.map +1 -0
- package/dist/connections/connectionLogging.cjs +29 -0
- package/dist/connections/connectionLogging.cjs.map +1 -0
- package/dist/connections/connectionLogging.d.ts +11 -0
- package/dist/connections/connectionLogging.d.ts.map +1 -0
- package/dist/connections/connectionLogging.js +29 -0
- package/dist/connections/connectionLogging.js.map +1 -0
- package/dist/connections/connectionLoggingField.cjs +37 -0
- package/dist/connections/connectionLoggingField.cjs.map +1 -0
- package/dist/connections/connectionLoggingField.d.ts +12 -0
- package/dist/connections/connectionLoggingField.d.ts.map +1 -0
- package/dist/connections/connectionLoggingField.js +37 -0
- package/dist/connections/connectionLoggingField.js.map +1 -0
- package/dist/connections/connectionLoggingModel.cjs +16 -0
- package/dist/connections/connectionLoggingModel.cjs.map +1 -0
- package/dist/connections/connectionLoggingModel.d.ts +6 -0
- package/dist/connections/connectionLoggingModel.d.ts.map +1 -0
- package/dist/connections/connectionLoggingModel.js +16 -0
- package/dist/connections/connectionLoggingModel.js.map +1 -0
- package/dist/connections/connectionResolveView.cjs +24 -0
- package/dist/connections/connectionResolveView.cjs.map +1 -0
- package/dist/connections/connectionResolveView.d.ts +5 -0
- package/dist/connections/connectionResolveView.d.ts.map +1 -0
- package/dist/connections/connectionResolveView.js +24 -0
- package/dist/connections/connectionResolveView.js.map +1 -0
- package/dist/connections/connectionTestButton.cjs +58 -0
- package/dist/connections/connectionTestButton.cjs.map +1 -0
- package/dist/connections/connectionTestButton.d.ts +6 -0
- package/dist/connections/connectionTestButton.d.ts.map +1 -0
- package/dist/connections/connectionTestButton.js +58 -0
- package/dist/connections/connectionTestButton.js.map +1 -0
- package/dist/connections/connectionTestView.cjs +12 -0
- package/dist/connections/connectionTestView.cjs.map +1 -0
- package/dist/connections/connectionTestView.d.ts +5 -0
- package/dist/connections/connectionTestView.d.ts.map +1 -0
- package/dist/connections/connectionTestView.js +12 -0
- package/dist/connections/connectionTestView.js.map +1 -0
- package/dist/connections/connectionsPageModel.cjs +33 -0
- package/dist/connections/connectionsPageModel.cjs.map +1 -0
- package/dist/connections/connectionsPageModel.d.ts +24 -0
- package/dist/connections/connectionsPageModel.d.ts.map +1 -0
- package/dist/connections/connectionsPageModel.js +33 -0
- package/dist/connections/connectionsPageModel.js.map +1 -0
- package/dist/connections/iconProvider.cjs +20 -0
- package/dist/connections/iconProvider.cjs.map +1 -0
- package/dist/connections/iconProvider.d.ts +7 -0
- package/dist/connections/iconProvider.d.ts.map +1 -0
- package/dist/connections/iconProvider.js +20 -0
- package/dist/connections/iconProvider.js.map +1 -0
- package/dist/connections.cjs +45 -0
- package/dist/connections.cjs.map +1 -0
- package/dist/connections.d.ts +34 -0
- package/dist/connections.d.ts.map +1 -0
- package/dist/connections.js +45 -0
- package/dist/connections.js.map +1 -0
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +52 -295
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js +47 -290
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
- package/dist/data/diagnostics/MetricTile.cjs +44 -0
- package/dist/data/diagnostics/MetricTile.cjs.map +1 -0
- package/dist/data/diagnostics/MetricTile.d.ts +13 -0
- package/dist/data/diagnostics/MetricTile.d.ts.map +1 -0
- package/dist/data/diagnostics/MetricTile.js +44 -0
- package/dist/data/diagnostics/MetricTile.js.map +1 -0
- package/dist/data/diagnostics/StackDumpView.cjs +227 -0
- package/dist/data/diagnostics/StackDumpView.cjs.map +1 -0
- package/dist/data/diagnostics/StackDumpView.d.ts +53 -0
- package/dist/data/diagnostics/StackDumpView.d.ts.map +1 -0
- package/dist/data/diagnostics/StackDumpView.js +227 -0
- package/dist/data/diagnostics/StackDumpView.js.map +1 -0
- package/dist/data/diagnostics/fixtures.d.ts +1 -0
- package/dist/data/diagnostics/fixtures.d.ts.map +1 -1
- package/dist/data/diagnostics/metric-tone.cjs +18 -0
- package/dist/data/diagnostics/metric-tone.cjs.map +1 -0
- package/dist/data/diagnostics/metric-tone.d.ts +6 -0
- package/dist/data/diagnostics/metric-tone.d.ts.map +1 -0
- package/dist/data/diagnostics/metric-tone.js +18 -0
- package/dist/data/diagnostics/metric-tone.js.map +1 -0
- package/dist/data/diagnostics/stacktrace.cjs +44 -0
- package/dist/data/diagnostics/stacktrace.cjs.map +1 -1
- package/dist/data/diagnostics/stacktrace.d.ts +7 -0
- package/dist/data/diagnostics/stacktrace.d.ts.map +1 -1
- package/dist/data/diagnostics/stacktrace.js +44 -0
- package/dist/data/diagnostics/stacktrace.js.map +1 -1
- package/dist/data/diagnostics/types.d.ts +2 -8
- package/dist/data/diagnostics/types.d.ts.map +1 -1
- package/dist/data/lint/LintDetail.cjs +339 -0
- package/dist/data/lint/LintDetail.cjs.map +1 -0
- package/dist/data/lint/LintDetail.d.ts +17 -0
- package/dist/data/lint/LintDetail.d.ts.map +1 -0
- package/dist/data/lint/LintDetail.js +339 -0
- package/dist/data/lint/LintDetail.js.map +1 -0
- package/dist/data/lint/LintFilterBar.cjs +103 -0
- package/dist/data/lint/LintFilterBar.cjs.map +1 -0
- package/dist/data/lint/LintFilterBar.d.ts +16 -0
- package/dist/data/lint/LintFilterBar.d.ts.map +1 -0
- package/dist/data/lint/LintFilterBar.js +103 -0
- package/dist/data/lint/LintFilterBar.js.map +1 -0
- package/dist/data/lint/LintResults.cjs +144 -0
- package/dist/data/lint/LintResults.cjs.map +1 -0
- package/dist/data/lint/LintResults.d.ts +39 -0
- package/dist/data/lint/LintResults.d.ts.map +1 -0
- package/dist/data/lint/LintResults.fixtures.d.ts +10 -0
- package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -0
- package/dist/data/lint/LintResults.js +144 -0
- package/dist/data/lint/LintResults.js.map +1 -0
- package/dist/data/lint/LintTreeNode.cjs +66 -0
- package/dist/data/lint/LintTreeNode.cjs.map +1 -0
- package/dist/data/lint/LintTreeNode.d.ts +7 -0
- package/dist/data/lint/LintTreeNode.d.ts.map +1 -0
- package/dist/data/lint/LintTreeNode.js +66 -0
- package/dist/data/lint/LintTreeNode.js.map +1 -0
- package/dist/data/lint/actions.cjs +195 -0
- package/dist/data/lint/actions.cjs.map +1 -0
- package/dist/data/lint/actions.d.ts +29 -0
- package/dist/data/lint/actions.d.ts.map +1 -0
- package/dist/data/lint/actions.js +195 -0
- package/dist/data/lint/actions.js.map +1 -0
- package/dist/data/lint/grouping-options.cjs +14 -0
- package/dist/data/lint/grouping-options.cjs.map +1 -0
- package/dist/data/lint/grouping-options.d.ts +9 -0
- package/dist/data/lint/grouping-options.d.ts.map +1 -0
- package/dist/data/lint/grouping-options.js +14 -0
- package/dist/data/lint/grouping-options.js.map +1 -0
- package/dist/data/lint/grouping.cjs +450 -0
- package/dist/data/lint/grouping.cjs.map +1 -0
- package/dist/data/lint/grouping.d.ts +10 -0
- package/dist/data/lint/grouping.d.ts.map +1 -0
- package/dist/data/lint/grouping.js +450 -0
- package/dist/data/lint/grouping.js.map +1 -0
- package/dist/data/lint/index.d.ts +10 -0
- package/dist/data/lint/index.d.ts.map +1 -0
- package/dist/data/lint/paths.cjs +35 -0
- package/dist/data/lint/paths.cjs.map +1 -0
- package/dist/data/lint/paths.d.ts +13 -0
- package/dist/data/lint/paths.d.ts.map +1 -0
- package/dist/data/lint/paths.js +35 -0
- package/dist/data/lint/paths.js.map +1 -0
- package/dist/data/lint/stats.cjs +76 -0
- package/dist/data/lint/stats.cjs.map +1 -0
- package/dist/data/lint/stats.d.ts +19 -0
- package/dist/data/lint/stats.d.ts.map +1 -0
- package/dist/data/lint/stats.js +76 -0
- package/dist/data/lint/stats.js.map +1 -0
- package/dist/data/lint/types.cjs +16 -0
- package/dist/data/lint/types.cjs.map +1 -0
- package/dist/data/lint/types.d.ts +93 -0
- package/dist/data/lint/types.d.ts.map +1 -0
- package/dist/data/lint/types.js +16 -0
- package/dist/data/lint/types.js.map +1 -0
- package/dist/data/test-runner/TestAttemptDetail.cjs +113 -0
- package/dist/data/test-runner/TestAttemptDetail.cjs.map +1 -0
- package/dist/data/test-runner/TestAttemptDetail.d.ts +19 -0
- package/dist/data/test-runner/TestAttemptDetail.d.ts.map +1 -0
- package/dist/data/test-runner/TestAttemptDetail.js +113 -0
- package/dist/data/test-runner/TestAttemptDetail.js.map +1 -0
- package/dist/data/test-runner/TestAttempts.cjs +36 -0
- package/dist/data/test-runner/TestAttempts.cjs.map +1 -0
- package/dist/data/test-runner/TestAttempts.d.ts +5 -0
- package/dist/data/test-runner/TestAttempts.d.ts.map +1 -0
- package/dist/data/test-runner/TestAttempts.js +36 -0
- package/dist/data/test-runner/TestAttempts.js.map +1 -0
- package/dist/data/test-runner/TestDetailPanel.cjs +13 -3
- package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.js +14 -4
- package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
- package/dist/data/test-runner/TestFailureDetail.cjs +9 -29
- package/dist/data/test-runner/TestFailureDetail.cjs.map +1 -1
- package/dist/data/test-runner/TestFailureDetail.d.ts +6 -6
- package/dist/data/test-runner/TestFailureDetail.d.ts.map +1 -1
- package/dist/data/test-runner/TestFailureDetail.js +9 -29
- package/dist/data/test-runner/TestFailureDetail.js.map +1 -1
- package/dist/data/test-runner/TestRunSummary.cjs +33 -0
- package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
- package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunSummary.js +34 -1
- package/dist/data/test-runner/TestRunSummary.js.map +1 -1
- package/dist/data/test-runner/TestRunner.cjs +3 -0
- package/dist/data/test-runner/TestRunner.cjs.map +1 -1
- package/dist/data/test-runner/TestRunner.d.ts +8 -1
- package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.js +3 -0
- package/dist/data/test-runner/TestRunner.js.map +1 -1
- package/dist/data/test-runner/TestTreeNode.cjs +3 -1
- package/dist/data/test-runner/TestTreeNode.cjs.map +1 -1
- package/dist/data/test-runner/TestTreeNode.d.ts.map +1 -1
- package/dist/data/test-runner/TestTreeNode.js +3 -1
- package/dist/data/test-runner/TestTreeNode.js.map +1 -1
- package/dist/data/test-runner/adapter.cjs +9 -1
- package/dist/data/test-runner/adapter.cjs.map +1 -1
- package/dist/data/test-runner/adapter.d.ts +5 -0
- package/dist/data/test-runner/adapter.d.ts.map +1 -1
- package/dist/data/test-runner/adapter.js +9 -1
- package/dist/data/test-runner/adapter.js.map +1 -1
- package/dist/data/test-runner/attempts.cjs +62 -0
- package/dist/data/test-runner/attempts.cjs.map +1 -0
- package/dist/data/test-runner/attempts.d.ts +13 -0
- package/dist/data/test-runner/attempts.d.ts.map +1 -0
- package/dist/data/test-runner/attempts.js +62 -0
- package/dist/data/test-runner/attempts.js.map +1 -0
- package/dist/data/test-runner/context.cjs.map +1 -1
- package/dist/data/test-runner/context.d.ts +6 -0
- package/dist/data/test-runner/context.d.ts.map +1 -1
- package/dist/data/test-runner/context.js.map +1 -1
- package/dist/data/test-runner/index.d.ts +5 -1
- package/dist/data/test-runner/index.d.ts.map +1 -1
- package/dist/data/test-runner/marks.cjs +2 -0
- package/dist/data/test-runner/marks.cjs.map +1 -1
- package/dist/data/test-runner/marks.d.ts.map +1 -1
- package/dist/data/test-runner/marks.js +2 -0
- package/dist/data/test-runner/marks.js.map +1 -1
- package/dist/data/test-runner/process-metrics.cjs +15 -0
- package/dist/data/test-runner/process-metrics.cjs.map +1 -0
- package/dist/data/test-runner/process-metrics.d.ts +22 -0
- package/dist/data/test-runner/process-metrics.d.ts.map +1 -0
- package/dist/data/test-runner/process-metrics.js +15 -0
- package/dist/data/test-runner/process-metrics.js.map +1 -0
- package/dist/data/test-runner/status.cjs +11 -3
- package/dist/data/test-runner/status.cjs.map +1 -1
- package/dist/data/test-runner/status.d.ts +3 -1
- package/dist/data/test-runner/status.d.ts.map +1 -1
- package/dist/data/test-runner/status.js +11 -3
- package/dist/data/test-runner/status.js.map +1 -1
- package/dist/data/test-runner/types.d.ts +14 -0
- package/dist/data/test-runner/types.d.ts.map +1 -1
- package/dist/data/traces/GoProfileView.cjs +176 -0
- package/dist/data/traces/GoProfileView.cjs.map +1 -0
- package/dist/data/traces/GoProfileView.d.ts +30 -0
- package/dist/data/traces/GoProfileView.d.ts.map +1 -0
- package/dist/data/traces/GoProfileView.js +176 -0
- package/dist/data/traces/GoProfileView.js.map +1 -0
- package/dist/data/traces/ProcessFacetTable.cjs +79 -0
- package/dist/data/traces/ProcessFacetTable.cjs.map +1 -0
- package/dist/data/traces/ProcessFacetTable.d.ts +21 -0
- package/dist/data/traces/ProcessFacetTable.d.ts.map +1 -0
- package/dist/data/traces/ProcessFacetTable.js +79 -0
- package/dist/data/traces/ProcessFacetTable.js.map +1 -0
- package/dist/data/traces/ProcessRecordViews.cjs +41 -0
- package/dist/data/traces/ProcessRecordViews.cjs.map +1 -0
- package/dist/data/traces/ProcessRecordViews.d.ts +16 -0
- package/dist/data/traces/ProcessRecordViews.d.ts.map +1 -0
- package/dist/data/traces/ProcessRecordViews.js +41 -0
- package/dist/data/traces/ProcessRecordViews.js.map +1 -0
- package/dist/data/traces/ProcessTraceDetail.cjs +316 -0
- package/dist/data/traces/ProcessTraceDetail.cjs.map +1 -0
- package/dist/data/traces/ProcessTraceDetail.d.ts +39 -0
- package/dist/data/traces/ProcessTraceDetail.d.ts.map +1 -0
- package/dist/data/traces/ProcessTraceDetail.js +316 -0
- package/dist/data/traces/ProcessTraceDetail.js.map +1 -0
- package/dist/data/traces/ProcessTraceTree.cjs +76 -34
- package/dist/data/traces/ProcessTraceTree.cjs.map +1 -1
- package/dist/data/traces/ProcessTraceTree.d.ts +21 -4
- package/dist/data/traces/ProcessTraceTree.d.ts.map +1 -1
- package/dist/data/traces/ProcessTraceTree.js +72 -30
- package/dist/data/traces/ProcessTraceTree.js.map +1 -1
- package/dist/data/traces/Sparkline.cjs +27 -5
- package/dist/data/traces/Sparkline.cjs.map +1 -1
- package/dist/data/traces/Sparkline.d.ts +17 -1
- package/dist/data/traces/Sparkline.d.ts.map +1 -1
- package/dist/data/traces/Sparkline.js +28 -6
- package/dist/data/traces/Sparkline.js.map +1 -1
- package/dist/data/traces/TraceView.cjs +9 -0
- package/dist/data/traces/TraceView.cjs.map +1 -1
- package/dist/data/traces/TraceView.d.ts +4 -2
- package/dist/data/traces/TraceView.d.ts.map +1 -1
- package/dist/data/traces/TraceView.js +9 -0
- package/dist/data/traces/TraceView.js.map +1 -1
- package/dist/data/traces/TraceWindowList.cjs +117 -0
- package/dist/data/traces/TraceWindowList.cjs.map +1 -0
- package/dist/data/traces/TraceWindowList.d.ts +48 -0
- package/dist/data/traces/TraceWindowList.d.ts.map +1 -0
- package/dist/data/traces/TraceWindowList.js +117 -0
- package/dist/data/traces/TraceWindowList.js.map +1 -0
- package/dist/data/traces/fixtures.d.ts +25 -1
- package/dist/data/traces/fixtures.d.ts.map +1 -1
- package/dist/data/traces/index.d.ts +10 -3
- package/dist/data/traces/index.d.ts.map +1 -1
- package/dist/data/traces/process-facets.cjs +48 -0
- package/dist/data/traces/process-facets.cjs.map +1 -0
- package/dist/data/traces/process-facets.d.ts +38 -0
- package/dist/data/traces/process-facets.d.ts.map +1 -0
- package/dist/data/traces/process-facets.js +48 -0
- package/dist/data/traces/process-facets.js.map +1 -0
- package/dist/data/traces/process-tree.cjs +36 -4
- package/dist/data/traces/process-tree.cjs.map +1 -1
- package/dist/data/traces/process-tree.d.ts +20 -1
- package/dist/data/traces/process-tree.d.ts.map +1 -1
- package/dist/data/traces/process-tree.js +36 -4
- package/dist/data/traces/process-tree.js.map +1 -1
- package/dist/data/traces/profile-aggregate.cjs +78 -0
- package/dist/data/traces/profile-aggregate.cjs.map +1 -0
- package/dist/data/traces/profile-aggregate.d.ts +41 -0
- package/dist/data/traces/profile-aggregate.d.ts.map +1 -0
- package/dist/data/traces/profile-aggregate.js +78 -0
- package/dist/data/traces/profile-aggregate.js.map +1 -0
- package/dist/data/traces/stack-checkpoints.cjs +22 -0
- package/dist/data/traces/stack-checkpoints.cjs.map +1 -0
- package/dist/data/traces/stack-checkpoints.d.ts +18 -0
- package/dist/data/traces/stack-checkpoints.d.ts.map +1 -0
- package/dist/data/traces/stack-checkpoints.js +22 -0
- package/dist/data/traces/stack-checkpoints.js.map +1 -0
- package/dist/data/traces/types.d.ts +120 -5
- package/dist/data/traces/types.d.ts.map +1 -1
- package/dist/data/verification/adapters.cjs +1 -0
- package/dist/data/verification/adapters.cjs.map +1 -1
- package/dist/data/verification/adapters.d.ts.map +1 -1
- package/dist/data/verification/adapters.js +1 -0
- package/dist/data/verification/adapters.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +85 -7
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +4 -0
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +81 -3
- package/dist/data.js.map +1 -1
- package/dist/index.cjs +87 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +81 -3
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Icon } from "../Icon.js";
|
|
3
|
+
import { Badge } from "../Badge.js";
|
|
4
|
+
import { cn } from "../../lib/utils.js";
|
|
5
|
+
import { LintSeverityIcon, ToolIcon } from "../test-runner/MarkIcons.js";
|
|
6
|
+
import { toolMark } from "../test-runner/marks.js";
|
|
7
|
+
import { lintNodeCount, lintNodeSeverity } from "./stats.js";
|
|
8
|
+
import { UiTag } from "../../icons/components/UiTag.js";
|
|
9
|
+
import { UiFileCode } from "../../icons/components/UiFileCode.js";
|
|
10
|
+
import { UiFolder } from "../../icons/components/UiFolder.js";
|
|
11
|
+
import { UiWrench } from "../../icons/components/UiWrench.js";
|
|
12
|
+
const COUNT_TONE = { error: "danger", warning: "warning", info: "info" };
|
|
13
|
+
function NodeIcon({ node }) {
|
|
14
|
+
switch (node.kind) {
|
|
15
|
+
case "linter":
|
|
16
|
+
return toolMark(node.linterName) ? /* @__PURE__ */ jsx(ToolIcon, { tool: node.linterName }) : /* @__PURE__ */ jsx(Icon, { icon: UiWrench, className: "shrink-0 text-muted-foreground" });
|
|
17
|
+
case "lint-folder":
|
|
18
|
+
return /* @__PURE__ */ jsx(Icon, { icon: UiFolder, className: "shrink-0 text-muted-foreground" });
|
|
19
|
+
case "lint-file":
|
|
20
|
+
return /* @__PURE__ */ jsx(Icon, { icon: UiFileCode, className: "shrink-0 text-muted-foreground" });
|
|
21
|
+
case "lint-rule":
|
|
22
|
+
case "lint-rule-group":
|
|
23
|
+
return /* @__PURE__ */ jsx(Icon, { icon: UiTag, className: "shrink-0 text-muted-foreground" });
|
|
24
|
+
case "linter-error":
|
|
25
|
+
return /* @__PURE__ */ jsx(LintSeverityIcon, { severity: "error" });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function LintTreeNode({ node, selected }) {
|
|
29
|
+
var _a;
|
|
30
|
+
const count = node.kind === "linter-error" ? 0 : lintNodeCount(node);
|
|
31
|
+
const failedToRun = node.kind === "linter" && ((_a = node.children) == null ? void 0 : _a.some((c) => c.kind === "linter-error"));
|
|
32
|
+
const note = node.skipped ? node.message : failedToRun ? "failed to run" : void 0;
|
|
33
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
34
|
+
/* @__PURE__ */ jsx(NodeIcon, { node }),
|
|
35
|
+
/* @__PURE__ */ jsx(
|
|
36
|
+
"span",
|
|
37
|
+
{
|
|
38
|
+
className: cn(
|
|
39
|
+
"min-w-0 truncate",
|
|
40
|
+
selected ? "font-semibold" : "font-medium",
|
|
41
|
+
node.kind === "linter-error" ? "text-red-600 dark:text-red-400" : "text-foreground",
|
|
42
|
+
node.skipped && "text-muted-foreground"
|
|
43
|
+
),
|
|
44
|
+
title: node.name,
|
|
45
|
+
children: node.name
|
|
46
|
+
}
|
|
47
|
+
),
|
|
48
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1" }),
|
|
49
|
+
note && /* @__PURE__ */ jsx(
|
|
50
|
+
"span",
|
|
51
|
+
{
|
|
52
|
+
className: cn(
|
|
53
|
+
"min-w-0 shrink-[100] truncate text-xs",
|
|
54
|
+
failedToRun ? "text-red-600 dark:text-red-400" : "text-muted-foreground"
|
|
55
|
+
),
|
|
56
|
+
title: note,
|
|
57
|
+
children: note
|
|
58
|
+
}
|
|
59
|
+
),
|
|
60
|
+
count > 0 && /* @__PURE__ */ jsx("span", { className: "flex shrink-0", title: `${count} violation${count === 1 ? "" : "s"}`, children: /* @__PURE__ */ jsx(Badge, { tone: COUNT_TONE[lintNodeSeverity(node)], variant: "solid", size: "xxs", count }) })
|
|
61
|
+
] });
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
LintTreeNode
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=LintTreeNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LintTreeNode.js","sources":["../../../src/data/lint/LintTreeNode.tsx"],"sourcesContent":["import { Icon } from \"../Icon\";\nimport { Badge } from \"../Badge\";\nimport { cn } from \"../../lib/utils\";\nimport { UiFileCode, UiFolder, UiTag, UiWrench } from \"../../icons\";\nimport { LintSeverityIcon, ToolIcon } from \"../test-runner/MarkIcons\";\nimport { toolMark } from \"../test-runner/marks\";\nimport { lintNodeCount, lintNodeSeverity } from \"./stats\";\nimport type { LintNode, LintSeverity } from \"./types\";\n\nconst COUNT_TONE = { error: \"danger\", warning: \"warning\", info: \"info\" } as const satisfies Record<\n LintSeverity,\n \"danger\" | \"warning\" | \"info\"\n>;\n\nfunction NodeIcon({ node }: { node: LintNode }) {\n switch (node.kind) {\n case \"linter\":\n return toolMark(node.linterName) ? (\n <ToolIcon tool={node.linterName} />\n ) : (\n <Icon icon={UiWrench} className=\"shrink-0 text-muted-foreground\" />\n );\n case \"lint-folder\":\n return <Icon icon={UiFolder} className=\"shrink-0 text-muted-foreground\" />;\n case \"lint-file\":\n return <Icon icon={UiFileCode} className=\"shrink-0 text-muted-foreground\" />;\n case \"lint-rule\":\n case \"lint-rule-group\":\n return <Icon icon={UiTag} className=\"shrink-0 text-muted-foreground\" />;\n case \"linter-error\":\n return <LintSeverityIcon severity=\"error\" />;\n }\n}\n\n/** One lint tree row: kind glyph, name, trailing note, and a violation count coloured by worst severity. */\nexport function LintTreeNode({ node, selected }: { node: LintNode; selected: boolean }) {\n const count = node.kind === \"linter-error\" ? 0 : lintNodeCount(node);\n const failedToRun = node.kind === \"linter\" && node.children?.some((c) => c.kind === \"linter-error\");\n const note = node.skipped ? node.message : failedToRun ? \"failed to run\" : undefined;\n return (\n <>\n <NodeIcon node={node} />\n <span\n className={cn(\n \"min-w-0 truncate\",\n selected ? \"font-semibold\" : \"font-medium\",\n node.kind === \"linter-error\" ? \"text-red-600 dark:text-red-400\" : \"text-foreground\",\n node.skipped && \"text-muted-foreground\",\n )}\n title={node.name}\n >\n {node.name}\n </span>\n <span className=\"flex-1\" />\n {note && (\n <span\n className={cn(\n \"min-w-0 shrink-[100] truncate text-xs\",\n failedToRun ? \"text-red-600 dark:text-red-400\" : \"text-muted-foreground\",\n )}\n title={note}\n >\n {note}\n </span>\n )}\n {count > 0 && (\n <span className=\"flex shrink-0\" title={`${count} violation${count === 1 ? \"\" : \"s\"}`}>\n <Badge tone={COUNT_TONE[lintNodeSeverity(node)]} variant=\"solid\" size=\"xxs\" count={count} />\n </span>\n )}\n </>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AASA,MAAM,aAAa,EAAE,OAAO,UAAU,SAAS,WAAW,MAAM,OAAA;AAKhE,SAAS,SAAS,EAAE,QAA4B;AAC9C,UAAQ,KAAK,MAAA;AAAA,IACX,KAAK;AACH,aAAO,SAAS,KAAK,UAAU,wBAC5B,UAAA,EAAS,MAAM,KAAK,WAAA,CAAY,IAEjC,oBAAC,MAAA,EAAK,MAAM,UAAU,WAAU,kCAAiC;AAAA,IAErE,KAAK;AACH,aAAO,oBAAC,MAAA,EAAK,MAAM,UAAU,WAAU,kCAAiC;AAAA,IAC1E,KAAK;AACH,aAAO,oBAAC,MAAA,EAAK,MAAM,YAAY,WAAU,kCAAiC;AAAA,IAC5E,KAAK;AAAA,IACL,KAAK;AACH,aAAO,oBAAC,MAAA,EAAK,MAAM,OAAO,WAAU,kCAAiC;AAAA,IACvE,KAAK;AACH,aAAO,oBAAC,kBAAA,EAAiB,UAAS,QAAA,CAAQ;AAAA,EAAA;AAEhD;AAGO,SAAS,aAAa,EAAE,MAAM,YAAmD;;AACtF,QAAM,QAAQ,KAAK,SAAS,iBAAiB,IAAI,cAAc,IAAI;AACnE,QAAM,cAAc,KAAK,SAAS,cAAY,UAAK,aAAL,mBAAe,KAAK,CAAC,MAAM,EAAE,SAAS;AACpF,QAAM,OAAO,KAAK,UAAU,KAAK,UAAU,cAAc,kBAAkB;AAC3E,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA,oBAAC,YAAS,MAAY;AAAA,IACtB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,WAAW,kBAAkB;AAAA,UAC7B,KAAK,SAAS,iBAAiB,mCAAmC;AAAA,UAClE,KAAK,WAAW;AAAA,QAAA;AAAA,QAElB,OAAO,KAAK;AAAA,QAEX,UAAA,KAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAER,oBAAC,QAAA,EAAK,WAAU,SAAA,CAAS;AAAA,IACxB,QACC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,cAAc,mCAAmC;AAAA,QAAA;AAAA,QAEnD,OAAO;AAAA,QAEN,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJ,QAAQ,KACP,oBAAC,QAAA,EAAK,WAAU,iBAAgB,OAAO,GAAG,KAAK,aAAa,UAAU,IAAI,KAAK,GAAG,IAChF,UAAA,oBAAC,OAAA,EAAM,MAAM,WAAW,iBAAiB,IAAI,CAAC,GAAG,SAAQ,SAAQ,MAAK,OAAM,MAAA,CAAc,EAAA,CAC5F;AAAA,EAAA,GAEJ;AAEJ;"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const paths = require("./paths.cjs");
|
|
4
|
+
const DISABLE_TITLE = "Add {source} to .gavel.yaml";
|
|
5
|
+
function folderPattern(path) {
|
|
6
|
+
if (!path) return "**";
|
|
7
|
+
const trimmed = path.replace(/\/+$/, "");
|
|
8
|
+
return trimmed ? `${trimmed}/**` : "**";
|
|
9
|
+
}
|
|
10
|
+
function collectFolderLintStats(folder, results) {
|
|
11
|
+
const targetPath = folder.target_path ?? "";
|
|
12
|
+
const counts = /* @__PURE__ */ new Map();
|
|
13
|
+
for (const result of results) {
|
|
14
|
+
if (folder.work_dir && result.work_dir && result.work_dir !== folder.work_dir) continue;
|
|
15
|
+
for (const violation of result.violations ?? []) {
|
|
16
|
+
const rawFile = paths.relPath(violation.file, result.work_dir);
|
|
17
|
+
if (!rawFile) continue;
|
|
18
|
+
if (targetPath !== "" && rawFile !== targetPath && !rawFile.startsWith(`${targetPath}/`)) continue;
|
|
19
|
+
const current = counts.get(result.linter);
|
|
20
|
+
if (current) current.count += 1;
|
|
21
|
+
else counts.set(result.linter, { linter: result.linter, count: 1, workDir: result.work_dir });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return Array.from(counts.values()).sort((a, b) => b.count - a.count || a.linter.localeCompare(b.linter));
|
|
25
|
+
}
|
|
26
|
+
function disableLinter(linter, workDir) {
|
|
27
|
+
return {
|
|
28
|
+
key: "linter-disable",
|
|
29
|
+
label: `Disable ${linter} entirely`,
|
|
30
|
+
title: DISABLE_TITLE,
|
|
31
|
+
req: { source: linter, work_dir: workDir },
|
|
32
|
+
variant: "subtle"
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function lintFolderActions(node, results) {
|
|
36
|
+
const pattern = folderPattern(node.target_path);
|
|
37
|
+
const linter = node.linterName ?? "";
|
|
38
|
+
const rule = node.ruleName ?? "";
|
|
39
|
+
const stats = linter ? [] : collectFolderLintStats(node, results);
|
|
40
|
+
const statWorkDirs = new Set(stats.flatMap((s) => s.workDir ? [s.workDir] : []));
|
|
41
|
+
const workDir = node.work_dir || (statWorkDirs.size === 1 ? Array.from(statWorkDirs)[0] : "");
|
|
42
|
+
if (linter && rule) {
|
|
43
|
+
return [
|
|
44
|
+
{
|
|
45
|
+
key: "rule-folder",
|
|
46
|
+
label: `Ignore ${rule} in this folder`,
|
|
47
|
+
title: "Add {source, rule, file} to .gavel.yaml",
|
|
48
|
+
req: { source: linter, rule, file: pattern, work_dir: workDir },
|
|
49
|
+
disabledWithoutWorkDir: true
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
key: "rule-repo",
|
|
53
|
+
label: `Ignore rule ${rule} everywhere`,
|
|
54
|
+
title: "Add {source, rule} to .gavel.yaml",
|
|
55
|
+
req: { source: linter, rule, work_dir: workDir }
|
|
56
|
+
},
|
|
57
|
+
disableLinter(linter, workDir)
|
|
58
|
+
];
|
|
59
|
+
}
|
|
60
|
+
const everything = {
|
|
61
|
+
key: "folder-everything",
|
|
62
|
+
label: "Ignore everything in this folder",
|
|
63
|
+
title: "Add {file} to .gavel.yaml",
|
|
64
|
+
req: { file: pattern, work_dir: workDir },
|
|
65
|
+
disabledWithoutWorkDir: true
|
|
66
|
+
};
|
|
67
|
+
if (linter) {
|
|
68
|
+
return [
|
|
69
|
+
everything,
|
|
70
|
+
{
|
|
71
|
+
key: "linter-folder",
|
|
72
|
+
label: `Ignore ${linter} in this folder`,
|
|
73
|
+
title: "Add {source, file} to .gavel.yaml",
|
|
74
|
+
req: { source: linter, file: pattern, work_dir: workDir },
|
|
75
|
+
disabledWithoutWorkDir: true
|
|
76
|
+
},
|
|
77
|
+
disableLinter(linter, workDir)
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
return [
|
|
81
|
+
everything,
|
|
82
|
+
...stats.flatMap((stat) => [
|
|
83
|
+
{
|
|
84
|
+
key: `linter-folder:${stat.linter}`,
|
|
85
|
+
label: `Ignore ${stat.linter} in this folder`,
|
|
86
|
+
title: "Add {source, file} to .gavel.yaml",
|
|
87
|
+
req: { source: stat.linter, file: pattern, work_dir: workDir },
|
|
88
|
+
variant: "subtle",
|
|
89
|
+
disabledWithoutWorkDir: true
|
|
90
|
+
},
|
|
91
|
+
{ ...disableLinter(stat.linter, workDir), key: `linter-disable:${stat.linter}` }
|
|
92
|
+
])
|
|
93
|
+
];
|
|
94
|
+
}
|
|
95
|
+
function uniqueChildLinters(node) {
|
|
96
|
+
const names = (node.children ?? []).flatMap((c) => c.kind === "linter" && c.linterName ? [c.linterName] : []);
|
|
97
|
+
return Array.from(new Set(names));
|
|
98
|
+
}
|
|
99
|
+
function lintFileActions(node) {
|
|
100
|
+
const linter = node.linterName ?? "";
|
|
101
|
+
const targetPath = node.target_path || node.file || "";
|
|
102
|
+
const workDir = node.work_dir ?? "";
|
|
103
|
+
if (linter) {
|
|
104
|
+
return [
|
|
105
|
+
{
|
|
106
|
+
key: "file-everything-linter",
|
|
107
|
+
label: `Ignore all ${linter} in this file`,
|
|
108
|
+
title: "Add {source, file} to .gavel.yaml",
|
|
109
|
+
req: { source: linter, file: targetPath, work_dir: workDir }
|
|
110
|
+
},
|
|
111
|
+
disableLinter(linter, workDir)
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
return [
|
|
115
|
+
{
|
|
116
|
+
key: "file-everything",
|
|
117
|
+
label: "Ignore everything in this file",
|
|
118
|
+
title: "Add {file} to .gavel.yaml",
|
|
119
|
+
req: { file: targetPath, work_dir: workDir }
|
|
120
|
+
},
|
|
121
|
+
...uniqueChildLinters(node).flatMap((child) => [
|
|
122
|
+
{
|
|
123
|
+
key: `file-linter:${child}`,
|
|
124
|
+
label: `Ignore all ${child} in this file`,
|
|
125
|
+
title: "Add {source, file} to .gavel.yaml",
|
|
126
|
+
req: { source: child, file: targetPath, work_dir: workDir },
|
|
127
|
+
variant: "subtle"
|
|
128
|
+
},
|
|
129
|
+
{ ...disableLinter(child, workDir), key: `linter-disable:${child}` }
|
|
130
|
+
])
|
|
131
|
+
];
|
|
132
|
+
}
|
|
133
|
+
function lintRuleActions(node) {
|
|
134
|
+
const linter = node.linterName ?? "";
|
|
135
|
+
const rule = node.ruleName ?? "";
|
|
136
|
+
const workDir = node.work_dir ?? "";
|
|
137
|
+
const targetPath = node.target_path || node.file || "";
|
|
138
|
+
return [
|
|
139
|
+
...node.file ? [
|
|
140
|
+
{
|
|
141
|
+
key: "rule-file",
|
|
142
|
+
label: `Ignore ${rule} in this file`,
|
|
143
|
+
title: "Add {source, rule, file} to .gavel.yaml",
|
|
144
|
+
req: { source: linter, rule, file: targetPath, work_dir: workDir }
|
|
145
|
+
}
|
|
146
|
+
] : [],
|
|
147
|
+
{
|
|
148
|
+
key: "rule-repo",
|
|
149
|
+
label: `Ignore rule ${rule} everywhere`,
|
|
150
|
+
title: "Add {source, rule} to .gavel.yaml",
|
|
151
|
+
req: { source: linter, rule, work_dir: workDir }
|
|
152
|
+
},
|
|
153
|
+
disableLinter(linter, workDir)
|
|
154
|
+
];
|
|
155
|
+
}
|
|
156
|
+
function lintNodeActions(node, results) {
|
|
157
|
+
var _a;
|
|
158
|
+
switch (node.kind) {
|
|
159
|
+
case "linter":
|
|
160
|
+
return node.linterName ? [disableLinter(node.linterName, node.work_dir || ((_a = node.linter) == null ? void 0 : _a.work_dir) || "")] : [];
|
|
161
|
+
case "lint-folder":
|
|
162
|
+
return lintFolderActions(node, results);
|
|
163
|
+
case "lint-file":
|
|
164
|
+
return lintFileActions(node);
|
|
165
|
+
case "lint-rule":
|
|
166
|
+
case "lint-rule-group":
|
|
167
|
+
return lintRuleActions(node);
|
|
168
|
+
case "linter-error":
|
|
169
|
+
return [];
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function violationIgnoreAction({
|
|
173
|
+
violation,
|
|
174
|
+
linter,
|
|
175
|
+
file,
|
|
176
|
+
workDir
|
|
177
|
+
}) {
|
|
178
|
+
var _a;
|
|
179
|
+
const rule = (_a = violation.rule) == null ? void 0 : _a.method;
|
|
180
|
+
if (!rule || !file) return null;
|
|
181
|
+
return {
|
|
182
|
+
key: "violation",
|
|
183
|
+
label: "Ignore this violation",
|
|
184
|
+
title: "Add {source, rule, file} to .gavel.yaml",
|
|
185
|
+
variant: "subtle",
|
|
186
|
+
req: { source: linter, rule, file, work_dir: workDir }
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
exports.collectFolderLintStats = collectFolderLintStats;
|
|
190
|
+
exports.folderPattern = folderPattern;
|
|
191
|
+
exports.lintFileActions = lintFileActions;
|
|
192
|
+
exports.lintFolderActions = lintFolderActions;
|
|
193
|
+
exports.lintNodeActions = lintNodeActions;
|
|
194
|
+
exports.violationIgnoreAction = violationIgnoreAction;
|
|
195
|
+
//# sourceMappingURL=actions.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.cjs","sources":["../../../src/data/lint/actions.ts"],"sourcesContent":["// The \"Ignore ...\" buttons a lint node offers. These are pure descriptions: the\n// component never writes configuration itself, it hands the chosen action to\n// the host's `onIgnore`, which maps `req` onto an entry in `.gavel.yaml`.\n\nimport { relPath } from \"./paths\";\nimport type { LintAction, LintNode, LinterResult, Violation } from \"./types\";\n\nconst DISABLE_TITLE = \"Add {source} to .gavel.yaml\";\n\nexport function folderPattern(path: string | undefined): string {\n if (!path) return \"**\";\n const trimmed = path.replace(/\\/+$/, \"\");\n return trimmed ? `${trimmed}/**` : \"**\";\n}\n\ntype FolderLintStat = { linter: string; count: number; workDir: string | undefined };\n\n/** Per-linter violation counts beneath a folder, most findings first. */\nexport function collectFolderLintStats(\n folder: LintNode,\n results: readonly LinterResult[],\n): FolderLintStat[] {\n const targetPath = folder.target_path ?? \"\";\n const counts = new Map<string, FolderLintStat>();\n for (const result of results) {\n if (folder.work_dir && result.work_dir && result.work_dir !== folder.work_dir) continue;\n for (const violation of result.violations ?? []) {\n const rawFile = relPath(violation.file, result.work_dir);\n if (!rawFile) continue;\n if (targetPath !== \"\" && rawFile !== targetPath && !rawFile.startsWith(`${targetPath}/`)) continue;\n const current = counts.get(result.linter);\n if (current) current.count += 1;\n else counts.set(result.linter, { linter: result.linter, count: 1, workDir: result.work_dir });\n }\n }\n return Array.from(counts.values()).sort((a, b) => b.count - a.count || a.linter.localeCompare(b.linter));\n}\n\nfunction disableLinter(linter: string, workDir: string): LintAction {\n return {\n key: \"linter-disable\",\n label: `Disable ${linter} entirely`,\n title: DISABLE_TITLE,\n req: { source: linter, work_dir: workDir },\n variant: \"subtle\",\n };\n}\n\n/**\n * Folder buttons, by what the folder node is scoped to:\n * linter + rule -> folder / everywhere / disable the linter\n * linter only -> whole folder / this linter in the folder / disable the linter\n * neither -> whole folder, then a pair per linter that reported beneath it\n */\nexport function lintFolderActions(node: LintNode, results: readonly LinterResult[]): LintAction[] {\n const pattern = folderPattern(node.target_path);\n const linter = node.linterName ?? \"\";\n const rule = node.ruleName ?? \"\";\n const stats = linter ? [] : collectFolderLintStats(node, results);\n const statWorkDirs = new Set(stats.flatMap((s) => (s.workDir ? [s.workDir] : [])));\n const workDir = node.work_dir || (statWorkDirs.size === 1 ? Array.from(statWorkDirs)[0]! : \"\");\n\n if (linter && rule) {\n return [\n {\n key: \"rule-folder\",\n label: `Ignore ${rule} in this folder`,\n title: \"Add {source, rule, file} to .gavel.yaml\",\n req: { source: linter, rule, file: pattern, work_dir: workDir },\n disabledWithoutWorkDir: true,\n },\n {\n key: \"rule-repo\",\n label: `Ignore rule ${rule} everywhere`,\n title: \"Add {source, rule} to .gavel.yaml\",\n req: { source: linter, rule, work_dir: workDir },\n },\n disableLinter(linter, workDir),\n ];\n }\n\n const everything: LintAction = {\n key: \"folder-everything\",\n label: \"Ignore everything in this folder\",\n title: \"Add {file} to .gavel.yaml\",\n req: { file: pattern, work_dir: workDir },\n disabledWithoutWorkDir: true,\n };\n\n if (linter) {\n return [\n everything,\n {\n key: \"linter-folder\",\n label: `Ignore ${linter} in this folder`,\n title: \"Add {source, file} to .gavel.yaml\",\n req: { source: linter, file: pattern, work_dir: workDir },\n disabledWithoutWorkDir: true,\n },\n disableLinter(linter, workDir),\n ];\n }\n\n return [\n everything,\n ...stats.flatMap((stat): LintAction[] => [\n {\n key: `linter-folder:${stat.linter}`,\n label: `Ignore ${stat.linter} in this folder`,\n title: \"Add {source, file} to .gavel.yaml\",\n req: { source: stat.linter, file: pattern, work_dir: workDir },\n variant: \"subtle\",\n disabledWithoutWorkDir: true,\n },\n { ...disableLinter(stat.linter, workDir), key: `linter-disable:${stat.linter}` },\n ]),\n ];\n}\n\nfunction uniqueChildLinters(node: LintNode): string[] {\n const names = (node.children ?? []).flatMap((c) => (c.kind === \"linter\" && c.linterName ? [c.linterName] : []));\n return Array.from(new Set(names));\n}\n\n/** File buttons: a single-linter file ignores that linter; a multi-linter file offers each. */\nexport function lintFileActions(node: LintNode): LintAction[] {\n const linter = node.linterName ?? \"\";\n const targetPath = node.target_path || node.file || \"\";\n const workDir = node.work_dir ?? \"\";\n\n if (linter) {\n return [\n {\n key: \"file-everything-linter\",\n label: `Ignore all ${linter} in this file`,\n title: \"Add {source, file} to .gavel.yaml\",\n req: { source: linter, file: targetPath, work_dir: workDir },\n },\n disableLinter(linter, workDir),\n ];\n }\n\n return [\n {\n key: \"file-everything\",\n label: \"Ignore everything in this file\",\n title: \"Add {file} to .gavel.yaml\",\n req: { file: targetPath, work_dir: workDir },\n },\n ...uniqueChildLinters(node).flatMap((child): LintAction[] => [\n {\n key: `file-linter:${child}`,\n label: `Ignore all ${child} in this file`,\n title: \"Add {source, file} to .gavel.yaml\",\n req: { source: child, file: targetPath, work_dir: workDir },\n variant: \"subtle\",\n },\n { ...disableLinter(child, workDir), key: `linter-disable:${child}` },\n ]),\n ];\n}\n\nfunction lintRuleActions(node: LintNode): LintAction[] {\n const linter = node.linterName ?? \"\";\n const rule = node.ruleName ?? \"\";\n const workDir = node.work_dir ?? \"\";\n const targetPath = node.target_path || node.file || \"\";\n return [\n ...(node.file\n ? [\n {\n key: \"rule-file\",\n label: `Ignore ${rule} in this file`,\n title: \"Add {source, rule, file} to .gavel.yaml\",\n req: { source: linter, rule, file: targetPath, work_dir: workDir },\n },\n ]\n : []),\n {\n key: \"rule-repo\",\n label: `Ignore rule ${rule} everywhere`,\n title: \"Add {source, rule} to .gavel.yaml\",\n req: { source: linter, rule, work_dir: workDir },\n },\n disableLinter(linter, workDir),\n ];\n}\n\n/** Every ignore button for the selected node. A linter-error leaf has nothing to ignore. */\nexport function lintNodeActions(node: LintNode, results: readonly LinterResult[]): LintAction[] {\n switch (node.kind) {\n case \"linter\":\n return node.linterName\n ? [disableLinter(node.linterName, node.work_dir || node.linter?.work_dir || \"\")]\n : [];\n case \"lint-folder\":\n return lintFolderActions(node, results);\n case \"lint-file\":\n return lintFileActions(node);\n case \"lint-rule\":\n case \"lint-rule-group\":\n return lintRuleActions(node);\n case \"linter-error\":\n return [];\n }\n}\n\n/** Ignore one finding's rule in its file; unavailable for a finding without a rule or file. */\nexport function violationIgnoreAction({\n violation,\n linter,\n file,\n workDir,\n}: {\n violation: Violation;\n linter: string;\n file: string;\n workDir: string;\n}): LintAction | null {\n const rule = violation.rule?.method;\n if (!rule || !file) return null;\n return {\n key: \"violation\",\n label: \"Ignore this violation\",\n title: \"Add {source, rule, file} to .gavel.yaml\",\n variant: \"subtle\",\n req: { source: linter, rule, file, work_dir: workDir },\n };\n}\n"],"names":["relPath"],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { LintAction, LintNode, LinterResult, Violation } from './types.js';
|
|
2
|
+
export declare function folderPattern(path: string | undefined): string;
|
|
3
|
+
type FolderLintStat = {
|
|
4
|
+
linter: string;
|
|
5
|
+
count: number;
|
|
6
|
+
workDir: string | undefined;
|
|
7
|
+
};
|
|
8
|
+
/** Per-linter violation counts beneath a folder, most findings first. */
|
|
9
|
+
export declare function collectFolderLintStats(folder: LintNode, results: readonly LinterResult[]): FolderLintStat[];
|
|
10
|
+
/**
|
|
11
|
+
* Folder buttons, by what the folder node is scoped to:
|
|
12
|
+
* linter + rule -> folder / everywhere / disable the linter
|
|
13
|
+
* linter only -> whole folder / this linter in the folder / disable the linter
|
|
14
|
+
* neither -> whole folder, then a pair per linter that reported beneath it
|
|
15
|
+
*/
|
|
16
|
+
export declare function lintFolderActions(node: LintNode, results: readonly LinterResult[]): LintAction[];
|
|
17
|
+
/** File buttons: a single-linter file ignores that linter; a multi-linter file offers each. */
|
|
18
|
+
export declare function lintFileActions(node: LintNode): LintAction[];
|
|
19
|
+
/** Every ignore button for the selected node. A linter-error leaf has nothing to ignore. */
|
|
20
|
+
export declare function lintNodeActions(node: LintNode, results: readonly LinterResult[]): LintAction[];
|
|
21
|
+
/** Ignore one finding's rule in its file; unavailable for a finding without a rule or file. */
|
|
22
|
+
export declare function violationIgnoreAction({ violation, linter, file, workDir, }: {
|
|
23
|
+
violation: Violation;
|
|
24
|
+
linter: string;
|
|
25
|
+
file: string;
|
|
26
|
+
workDir: string;
|
|
27
|
+
}): LintAction | null;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/data/lint/actions.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAI7E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAI9D;AAED,KAAK,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAErF,yEAAyE;AACzE,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,SAAS,YAAY,EAAE,GAC/B,cAAc,EAAE,CAelB;AAYD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,UAAU,EAAE,CA+DhG;AAOD,+FAA+F;AAC/F,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,EAAE,CAmC5D;AA4BD,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,UAAU,EAAE,CAgB9F;AAED,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,MAAM,EACN,IAAI,EACJ,OAAO,GACR,EAAE;IACD,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,UAAU,GAAG,IAAI,CAUpB"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { relPath } from "./paths.js";
|
|
2
|
+
const DISABLE_TITLE = "Add {source} to .gavel.yaml";
|
|
3
|
+
function folderPattern(path) {
|
|
4
|
+
if (!path) return "**";
|
|
5
|
+
const trimmed = path.replace(/\/+$/, "");
|
|
6
|
+
return trimmed ? `${trimmed}/**` : "**";
|
|
7
|
+
}
|
|
8
|
+
function collectFolderLintStats(folder, results) {
|
|
9
|
+
const targetPath = folder.target_path ?? "";
|
|
10
|
+
const counts = /* @__PURE__ */ new Map();
|
|
11
|
+
for (const result of results) {
|
|
12
|
+
if (folder.work_dir && result.work_dir && result.work_dir !== folder.work_dir) continue;
|
|
13
|
+
for (const violation of result.violations ?? []) {
|
|
14
|
+
const rawFile = relPath(violation.file, result.work_dir);
|
|
15
|
+
if (!rawFile) continue;
|
|
16
|
+
if (targetPath !== "" && rawFile !== targetPath && !rawFile.startsWith(`${targetPath}/`)) continue;
|
|
17
|
+
const current = counts.get(result.linter);
|
|
18
|
+
if (current) current.count += 1;
|
|
19
|
+
else counts.set(result.linter, { linter: result.linter, count: 1, workDir: result.work_dir });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return Array.from(counts.values()).sort((a, b) => b.count - a.count || a.linter.localeCompare(b.linter));
|
|
23
|
+
}
|
|
24
|
+
function disableLinter(linter, workDir) {
|
|
25
|
+
return {
|
|
26
|
+
key: "linter-disable",
|
|
27
|
+
label: `Disable ${linter} entirely`,
|
|
28
|
+
title: DISABLE_TITLE,
|
|
29
|
+
req: { source: linter, work_dir: workDir },
|
|
30
|
+
variant: "subtle"
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function lintFolderActions(node, results) {
|
|
34
|
+
const pattern = folderPattern(node.target_path);
|
|
35
|
+
const linter = node.linterName ?? "";
|
|
36
|
+
const rule = node.ruleName ?? "";
|
|
37
|
+
const stats = linter ? [] : collectFolderLintStats(node, results);
|
|
38
|
+
const statWorkDirs = new Set(stats.flatMap((s) => s.workDir ? [s.workDir] : []));
|
|
39
|
+
const workDir = node.work_dir || (statWorkDirs.size === 1 ? Array.from(statWorkDirs)[0] : "");
|
|
40
|
+
if (linter && rule) {
|
|
41
|
+
return [
|
|
42
|
+
{
|
|
43
|
+
key: "rule-folder",
|
|
44
|
+
label: `Ignore ${rule} in this folder`,
|
|
45
|
+
title: "Add {source, rule, file} to .gavel.yaml",
|
|
46
|
+
req: { source: linter, rule, file: pattern, work_dir: workDir },
|
|
47
|
+
disabledWithoutWorkDir: true
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
key: "rule-repo",
|
|
51
|
+
label: `Ignore rule ${rule} everywhere`,
|
|
52
|
+
title: "Add {source, rule} to .gavel.yaml",
|
|
53
|
+
req: { source: linter, rule, work_dir: workDir }
|
|
54
|
+
},
|
|
55
|
+
disableLinter(linter, workDir)
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
const everything = {
|
|
59
|
+
key: "folder-everything",
|
|
60
|
+
label: "Ignore everything in this folder",
|
|
61
|
+
title: "Add {file} to .gavel.yaml",
|
|
62
|
+
req: { file: pattern, work_dir: workDir },
|
|
63
|
+
disabledWithoutWorkDir: true
|
|
64
|
+
};
|
|
65
|
+
if (linter) {
|
|
66
|
+
return [
|
|
67
|
+
everything,
|
|
68
|
+
{
|
|
69
|
+
key: "linter-folder",
|
|
70
|
+
label: `Ignore ${linter} in this folder`,
|
|
71
|
+
title: "Add {source, file} to .gavel.yaml",
|
|
72
|
+
req: { source: linter, file: pattern, work_dir: workDir },
|
|
73
|
+
disabledWithoutWorkDir: true
|
|
74
|
+
},
|
|
75
|
+
disableLinter(linter, workDir)
|
|
76
|
+
];
|
|
77
|
+
}
|
|
78
|
+
return [
|
|
79
|
+
everything,
|
|
80
|
+
...stats.flatMap((stat) => [
|
|
81
|
+
{
|
|
82
|
+
key: `linter-folder:${stat.linter}`,
|
|
83
|
+
label: `Ignore ${stat.linter} in this folder`,
|
|
84
|
+
title: "Add {source, file} to .gavel.yaml",
|
|
85
|
+
req: { source: stat.linter, file: pattern, work_dir: workDir },
|
|
86
|
+
variant: "subtle",
|
|
87
|
+
disabledWithoutWorkDir: true
|
|
88
|
+
},
|
|
89
|
+
{ ...disableLinter(stat.linter, workDir), key: `linter-disable:${stat.linter}` }
|
|
90
|
+
])
|
|
91
|
+
];
|
|
92
|
+
}
|
|
93
|
+
function uniqueChildLinters(node) {
|
|
94
|
+
const names = (node.children ?? []).flatMap((c) => c.kind === "linter" && c.linterName ? [c.linterName] : []);
|
|
95
|
+
return Array.from(new Set(names));
|
|
96
|
+
}
|
|
97
|
+
function lintFileActions(node) {
|
|
98
|
+
const linter = node.linterName ?? "";
|
|
99
|
+
const targetPath = node.target_path || node.file || "";
|
|
100
|
+
const workDir = node.work_dir ?? "";
|
|
101
|
+
if (linter) {
|
|
102
|
+
return [
|
|
103
|
+
{
|
|
104
|
+
key: "file-everything-linter",
|
|
105
|
+
label: `Ignore all ${linter} in this file`,
|
|
106
|
+
title: "Add {source, file} to .gavel.yaml",
|
|
107
|
+
req: { source: linter, file: targetPath, work_dir: workDir }
|
|
108
|
+
},
|
|
109
|
+
disableLinter(linter, workDir)
|
|
110
|
+
];
|
|
111
|
+
}
|
|
112
|
+
return [
|
|
113
|
+
{
|
|
114
|
+
key: "file-everything",
|
|
115
|
+
label: "Ignore everything in this file",
|
|
116
|
+
title: "Add {file} to .gavel.yaml",
|
|
117
|
+
req: { file: targetPath, work_dir: workDir }
|
|
118
|
+
},
|
|
119
|
+
...uniqueChildLinters(node).flatMap((child) => [
|
|
120
|
+
{
|
|
121
|
+
key: `file-linter:${child}`,
|
|
122
|
+
label: `Ignore all ${child} in this file`,
|
|
123
|
+
title: "Add {source, file} to .gavel.yaml",
|
|
124
|
+
req: { source: child, file: targetPath, work_dir: workDir },
|
|
125
|
+
variant: "subtle"
|
|
126
|
+
},
|
|
127
|
+
{ ...disableLinter(child, workDir), key: `linter-disable:${child}` }
|
|
128
|
+
])
|
|
129
|
+
];
|
|
130
|
+
}
|
|
131
|
+
function lintRuleActions(node) {
|
|
132
|
+
const linter = node.linterName ?? "";
|
|
133
|
+
const rule = node.ruleName ?? "";
|
|
134
|
+
const workDir = node.work_dir ?? "";
|
|
135
|
+
const targetPath = node.target_path || node.file || "";
|
|
136
|
+
return [
|
|
137
|
+
...node.file ? [
|
|
138
|
+
{
|
|
139
|
+
key: "rule-file",
|
|
140
|
+
label: `Ignore ${rule} in this file`,
|
|
141
|
+
title: "Add {source, rule, file} to .gavel.yaml",
|
|
142
|
+
req: { source: linter, rule, file: targetPath, work_dir: workDir }
|
|
143
|
+
}
|
|
144
|
+
] : [],
|
|
145
|
+
{
|
|
146
|
+
key: "rule-repo",
|
|
147
|
+
label: `Ignore rule ${rule} everywhere`,
|
|
148
|
+
title: "Add {source, rule} to .gavel.yaml",
|
|
149
|
+
req: { source: linter, rule, work_dir: workDir }
|
|
150
|
+
},
|
|
151
|
+
disableLinter(linter, workDir)
|
|
152
|
+
];
|
|
153
|
+
}
|
|
154
|
+
function lintNodeActions(node, results) {
|
|
155
|
+
var _a;
|
|
156
|
+
switch (node.kind) {
|
|
157
|
+
case "linter":
|
|
158
|
+
return node.linterName ? [disableLinter(node.linterName, node.work_dir || ((_a = node.linter) == null ? void 0 : _a.work_dir) || "")] : [];
|
|
159
|
+
case "lint-folder":
|
|
160
|
+
return lintFolderActions(node, results);
|
|
161
|
+
case "lint-file":
|
|
162
|
+
return lintFileActions(node);
|
|
163
|
+
case "lint-rule":
|
|
164
|
+
case "lint-rule-group":
|
|
165
|
+
return lintRuleActions(node);
|
|
166
|
+
case "linter-error":
|
|
167
|
+
return [];
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
function violationIgnoreAction({
|
|
171
|
+
violation,
|
|
172
|
+
linter,
|
|
173
|
+
file,
|
|
174
|
+
workDir
|
|
175
|
+
}) {
|
|
176
|
+
var _a;
|
|
177
|
+
const rule = (_a = violation.rule) == null ? void 0 : _a.method;
|
|
178
|
+
if (!rule || !file) return null;
|
|
179
|
+
return {
|
|
180
|
+
key: "violation",
|
|
181
|
+
label: "Ignore this violation",
|
|
182
|
+
title: "Add {source, rule, file} to .gavel.yaml",
|
|
183
|
+
variant: "subtle",
|
|
184
|
+
req: { source: linter, rule, file, work_dir: workDir }
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
export {
|
|
188
|
+
collectFolderLintStats,
|
|
189
|
+
folderPattern,
|
|
190
|
+
lintFileActions,
|
|
191
|
+
lintFolderActions,
|
|
192
|
+
lintNodeActions,
|
|
193
|
+
violationIgnoreAction
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sources":["../../../src/data/lint/actions.ts"],"sourcesContent":["// The \"Ignore ...\" buttons a lint node offers. These are pure descriptions: the\n// component never writes configuration itself, it hands the chosen action to\n// the host's `onIgnore`, which maps `req` onto an entry in `.gavel.yaml`.\n\nimport { relPath } from \"./paths\";\nimport type { LintAction, LintNode, LinterResult, Violation } from \"./types\";\n\nconst DISABLE_TITLE = \"Add {source} to .gavel.yaml\";\n\nexport function folderPattern(path: string | undefined): string {\n if (!path) return \"**\";\n const trimmed = path.replace(/\\/+$/, \"\");\n return trimmed ? `${trimmed}/**` : \"**\";\n}\n\ntype FolderLintStat = { linter: string; count: number; workDir: string | undefined };\n\n/** Per-linter violation counts beneath a folder, most findings first. */\nexport function collectFolderLintStats(\n folder: LintNode,\n results: readonly LinterResult[],\n): FolderLintStat[] {\n const targetPath = folder.target_path ?? \"\";\n const counts = new Map<string, FolderLintStat>();\n for (const result of results) {\n if (folder.work_dir && result.work_dir && result.work_dir !== folder.work_dir) continue;\n for (const violation of result.violations ?? []) {\n const rawFile = relPath(violation.file, result.work_dir);\n if (!rawFile) continue;\n if (targetPath !== \"\" && rawFile !== targetPath && !rawFile.startsWith(`${targetPath}/`)) continue;\n const current = counts.get(result.linter);\n if (current) current.count += 1;\n else counts.set(result.linter, { linter: result.linter, count: 1, workDir: result.work_dir });\n }\n }\n return Array.from(counts.values()).sort((a, b) => b.count - a.count || a.linter.localeCompare(b.linter));\n}\n\nfunction disableLinter(linter: string, workDir: string): LintAction {\n return {\n key: \"linter-disable\",\n label: `Disable ${linter} entirely`,\n title: DISABLE_TITLE,\n req: { source: linter, work_dir: workDir },\n variant: \"subtle\",\n };\n}\n\n/**\n * Folder buttons, by what the folder node is scoped to:\n * linter + rule -> folder / everywhere / disable the linter\n * linter only -> whole folder / this linter in the folder / disable the linter\n * neither -> whole folder, then a pair per linter that reported beneath it\n */\nexport function lintFolderActions(node: LintNode, results: readonly LinterResult[]): LintAction[] {\n const pattern = folderPattern(node.target_path);\n const linter = node.linterName ?? \"\";\n const rule = node.ruleName ?? \"\";\n const stats = linter ? [] : collectFolderLintStats(node, results);\n const statWorkDirs = new Set(stats.flatMap((s) => (s.workDir ? [s.workDir] : [])));\n const workDir = node.work_dir || (statWorkDirs.size === 1 ? Array.from(statWorkDirs)[0]! : \"\");\n\n if (linter && rule) {\n return [\n {\n key: \"rule-folder\",\n label: `Ignore ${rule} in this folder`,\n title: \"Add {source, rule, file} to .gavel.yaml\",\n req: { source: linter, rule, file: pattern, work_dir: workDir },\n disabledWithoutWorkDir: true,\n },\n {\n key: \"rule-repo\",\n label: `Ignore rule ${rule} everywhere`,\n title: \"Add {source, rule} to .gavel.yaml\",\n req: { source: linter, rule, work_dir: workDir },\n },\n disableLinter(linter, workDir),\n ];\n }\n\n const everything: LintAction = {\n key: \"folder-everything\",\n label: \"Ignore everything in this folder\",\n title: \"Add {file} to .gavel.yaml\",\n req: { file: pattern, work_dir: workDir },\n disabledWithoutWorkDir: true,\n };\n\n if (linter) {\n return [\n everything,\n {\n key: \"linter-folder\",\n label: `Ignore ${linter} in this folder`,\n title: \"Add {source, file} to .gavel.yaml\",\n req: { source: linter, file: pattern, work_dir: workDir },\n disabledWithoutWorkDir: true,\n },\n disableLinter(linter, workDir),\n ];\n }\n\n return [\n everything,\n ...stats.flatMap((stat): LintAction[] => [\n {\n key: `linter-folder:${stat.linter}`,\n label: `Ignore ${stat.linter} in this folder`,\n title: \"Add {source, file} to .gavel.yaml\",\n req: { source: stat.linter, file: pattern, work_dir: workDir },\n variant: \"subtle\",\n disabledWithoutWorkDir: true,\n },\n { ...disableLinter(stat.linter, workDir), key: `linter-disable:${stat.linter}` },\n ]),\n ];\n}\n\nfunction uniqueChildLinters(node: LintNode): string[] {\n const names = (node.children ?? []).flatMap((c) => (c.kind === \"linter\" && c.linterName ? [c.linterName] : []));\n return Array.from(new Set(names));\n}\n\n/** File buttons: a single-linter file ignores that linter; a multi-linter file offers each. */\nexport function lintFileActions(node: LintNode): LintAction[] {\n const linter = node.linterName ?? \"\";\n const targetPath = node.target_path || node.file || \"\";\n const workDir = node.work_dir ?? \"\";\n\n if (linter) {\n return [\n {\n key: \"file-everything-linter\",\n label: `Ignore all ${linter} in this file`,\n title: \"Add {source, file} to .gavel.yaml\",\n req: { source: linter, file: targetPath, work_dir: workDir },\n },\n disableLinter(linter, workDir),\n ];\n }\n\n return [\n {\n key: \"file-everything\",\n label: \"Ignore everything in this file\",\n title: \"Add {file} to .gavel.yaml\",\n req: { file: targetPath, work_dir: workDir },\n },\n ...uniqueChildLinters(node).flatMap((child): LintAction[] => [\n {\n key: `file-linter:${child}`,\n label: `Ignore all ${child} in this file`,\n title: \"Add {source, file} to .gavel.yaml\",\n req: { source: child, file: targetPath, work_dir: workDir },\n variant: \"subtle\",\n },\n { ...disableLinter(child, workDir), key: `linter-disable:${child}` },\n ]),\n ];\n}\n\nfunction lintRuleActions(node: LintNode): LintAction[] {\n const linter = node.linterName ?? \"\";\n const rule = node.ruleName ?? \"\";\n const workDir = node.work_dir ?? \"\";\n const targetPath = node.target_path || node.file || \"\";\n return [\n ...(node.file\n ? [\n {\n key: \"rule-file\",\n label: `Ignore ${rule} in this file`,\n title: \"Add {source, rule, file} to .gavel.yaml\",\n req: { source: linter, rule, file: targetPath, work_dir: workDir },\n },\n ]\n : []),\n {\n key: \"rule-repo\",\n label: `Ignore rule ${rule} everywhere`,\n title: \"Add {source, rule} to .gavel.yaml\",\n req: { source: linter, rule, work_dir: workDir },\n },\n disableLinter(linter, workDir),\n ];\n}\n\n/** Every ignore button for the selected node. A linter-error leaf has nothing to ignore. */\nexport function lintNodeActions(node: LintNode, results: readonly LinterResult[]): LintAction[] {\n switch (node.kind) {\n case \"linter\":\n return node.linterName\n ? [disableLinter(node.linterName, node.work_dir || node.linter?.work_dir || \"\")]\n : [];\n case \"lint-folder\":\n return lintFolderActions(node, results);\n case \"lint-file\":\n return lintFileActions(node);\n case \"lint-rule\":\n case \"lint-rule-group\":\n return lintRuleActions(node);\n case \"linter-error\":\n return [];\n }\n}\n\n/** Ignore one finding's rule in its file; unavailable for a finding without a rule or file. */\nexport function violationIgnoreAction({\n violation,\n linter,\n file,\n workDir,\n}: {\n violation: Violation;\n linter: string;\n file: string;\n workDir: string;\n}): LintAction | null {\n const rule = violation.rule?.method;\n if (!rule || !file) return null;\n return {\n key: \"violation\",\n label: \"Ignore this violation\",\n title: \"Add {source, rule, file} to .gavel.yaml\",\n variant: \"subtle\",\n req: { source: linter, rule, file, work_dir: workDir },\n };\n}\n"],"names":[],"mappings":";AAOA,MAAM,gBAAgB;AAEf,SAAS,cAAc,MAAkC;AAC9D,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,UAAU,KAAK,QAAQ,QAAQ,EAAE;AACvC,SAAO,UAAU,GAAG,OAAO,QAAQ;AACrC;AAKO,SAAS,uBACd,QACA,SACkB;AAClB,QAAM,aAAa,OAAO,eAAe;AACzC,QAAM,6BAAa,IAAA;AACnB,aAAW,UAAU,SAAS;AAC5B,QAAI,OAAO,YAAY,OAAO,YAAY,OAAO,aAAa,OAAO,SAAU;AAC/E,eAAW,aAAa,OAAO,cAAc,CAAA,GAAI;AAC/C,YAAM,UAAU,QAAQ,UAAU,MAAM,OAAO,QAAQ;AACvD,UAAI,CAAC,QAAS;AACd,UAAI,eAAe,MAAM,YAAY,cAAc,CAAC,QAAQ,WAAW,GAAG,UAAU,GAAG,EAAG;AAC1F,YAAM,UAAU,OAAO,IAAI,OAAO,MAAM;AACxC,UAAI,iBAAiB,SAAS;AAAA,UACzB,QAAO,IAAI,OAAO,QAAQ,EAAE,QAAQ,OAAO,QAAQ,OAAO,GAAG,SAAS,OAAO,UAAU;AAAA,IAC9F;AAAA,EACF;AACA,SAAO,MAAM,KAAK,OAAO,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,cAAc,EAAE,MAAM,CAAC;AACzG;AAEA,SAAS,cAAc,QAAgB,SAA6B;AAClE,SAAO;AAAA,IACL,KAAK;AAAA,IACL,OAAO,WAAW,MAAM;AAAA,IACxB,OAAO;AAAA,IACP,KAAK,EAAE,QAAQ,QAAQ,UAAU,QAAA;AAAA,IACjC,SAAS;AAAA,EAAA;AAEb;AAQO,SAAS,kBAAkB,MAAgB,SAAgD;AAChG,QAAM,UAAU,cAAc,KAAK,WAAW;AAC9C,QAAM,SAAS,KAAK,cAAc;AAClC,QAAM,OAAO,KAAK,YAAY;AAC9B,QAAM,QAAQ,SAAS,CAAA,IAAK,uBAAuB,MAAM,OAAO;AAChE,QAAM,eAAe,IAAI,IAAI,MAAM,QAAQ,CAAC,MAAO,EAAE,UAAU,CAAC,EAAE,OAAO,IAAI,CAAA,CAAG,CAAC;AACjF,QAAM,UAAU,KAAK,aAAa,aAAa,SAAS,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC,IAAK;AAE3F,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,MACL;AAAA,QACE,KAAK;AAAA,QACL,OAAO,UAAU,IAAI;AAAA,QACrB,OAAO;AAAA,QACP,KAAK,EAAE,QAAQ,QAAQ,MAAM,MAAM,SAAS,UAAU,QAAA;AAAA,QACtD,wBAAwB;AAAA,MAAA;AAAA,MAE1B;AAAA,QACE,KAAK;AAAA,QACL,OAAO,eAAe,IAAI;AAAA,QAC1B,OAAO;AAAA,QACP,KAAK,EAAE,QAAQ,QAAQ,MAAM,UAAU,QAAA;AAAA,MAAQ;AAAA,MAEjD,cAAc,QAAQ,OAAO;AAAA,IAAA;AAAA,EAEjC;AAEA,QAAM,aAAyB;AAAA,IAC7B,KAAK;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,KAAK,EAAE,MAAM,SAAS,UAAU,QAAA;AAAA,IAChC,wBAAwB;AAAA,EAAA;AAG1B,MAAI,QAAQ;AACV,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,OAAO,UAAU,MAAM;AAAA,QACvB,OAAO;AAAA,QACP,KAAK,EAAE,QAAQ,QAAQ,MAAM,SAAS,UAAU,QAAA;AAAA,QAChD,wBAAwB;AAAA,MAAA;AAAA,MAE1B,cAAc,QAAQ,OAAO;AAAA,IAAA;AAAA,EAEjC;AAEA,SAAO;AAAA,IACL;AAAA,IACA,GAAG,MAAM,QAAQ,CAAC,SAAuB;AAAA,MACvC;AAAA,QACE,KAAK,iBAAiB,KAAK,MAAM;AAAA,QACjC,OAAO,UAAU,KAAK,MAAM;AAAA,QAC5B,OAAO;AAAA,QACP,KAAK,EAAE,QAAQ,KAAK,QAAQ,MAAM,SAAS,UAAU,QAAA;AAAA,QACrD,SAAS;AAAA,QACT,wBAAwB;AAAA,MAAA;AAAA,MAE1B,EAAE,GAAG,cAAc,KAAK,QAAQ,OAAO,GAAG,KAAK,kBAAkB,KAAK,MAAM,GAAA;AAAA,IAAG,CAChF;AAAA,EAAA;AAEL;AAEA,SAAS,mBAAmB,MAA0B;AACpD,QAAM,SAAS,KAAK,YAAY,CAAA,GAAI,QAAQ,CAAC,MAAO,EAAE,SAAS,YAAY,EAAE,aAAa,CAAC,EAAE,UAAU,IAAI,EAAG;AAC9G,SAAO,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC;AAClC;AAGO,SAAS,gBAAgB,MAA8B;AAC5D,QAAM,SAAS,KAAK,cAAc;AAClC,QAAM,aAAa,KAAK,eAAe,KAAK,QAAQ;AACpD,QAAM,UAAU,KAAK,YAAY;AAEjC,MAAI,QAAQ;AACV,WAAO;AAAA,MACL;AAAA,QACE,KAAK;AAAA,QACL,OAAO,cAAc,MAAM;AAAA,QAC3B,OAAO;AAAA,QACP,KAAK,EAAE,QAAQ,QAAQ,MAAM,YAAY,UAAU,QAAA;AAAA,MAAQ;AAAA,MAE7D,cAAc,QAAQ,OAAO;AAAA,IAAA;AAAA,EAEjC;AAEA,SAAO;AAAA,IACL;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,MACP,KAAK,EAAE,MAAM,YAAY,UAAU,QAAA;AAAA,IAAQ;AAAA,IAE7C,GAAG,mBAAmB,IAAI,EAAE,QAAQ,CAAC,UAAwB;AAAA,MAC3D;AAAA,QACE,KAAK,eAAe,KAAK;AAAA,QACzB,OAAO,cAAc,KAAK;AAAA,QAC1B,OAAO;AAAA,QACP,KAAK,EAAE,QAAQ,OAAO,MAAM,YAAY,UAAU,QAAA;AAAA,QAClD,SAAS;AAAA,MAAA;AAAA,MAEX,EAAE,GAAG,cAAc,OAAO,OAAO,GAAG,KAAK,kBAAkB,KAAK,GAAA;AAAA,IAAG,CACpE;AAAA,EAAA;AAEL;AAEA,SAAS,gBAAgB,MAA8B;AACrD,QAAM,SAAS,KAAK,cAAc;AAClC,QAAM,OAAO,KAAK,YAAY;AAC9B,QAAM,UAAU,KAAK,YAAY;AACjC,QAAM,aAAa,KAAK,eAAe,KAAK,QAAQ;AACpD,SAAO;AAAA,IACL,GAAI,KAAK,OACL;AAAA,MACE;AAAA,QACE,KAAK;AAAA,QACL,OAAO,UAAU,IAAI;AAAA,QACrB,OAAO;AAAA,QACP,KAAK,EAAE,QAAQ,QAAQ,MAAM,MAAM,YAAY,UAAU,QAAA;AAAA,MAAQ;AAAA,IACnE,IAEF,CAAA;AAAA,IACJ;AAAA,MACE,KAAK;AAAA,MACL,OAAO,eAAe,IAAI;AAAA,MAC1B,OAAO;AAAA,MACP,KAAK,EAAE,QAAQ,QAAQ,MAAM,UAAU,QAAA;AAAA,IAAQ;AAAA,IAEjD,cAAc,QAAQ,OAAO;AAAA,EAAA;AAEjC;AAGO,SAAS,gBAAgB,MAAgB,SAAgD;;AAC9F,UAAQ,KAAK,MAAA;AAAA,IACX,KAAK;AACH,aAAO,KAAK,aACR,CAAC,cAAc,KAAK,YAAY,KAAK,cAAY,UAAK,WAAL,mBAAa,aAAY,EAAE,CAAC,IAC7E,CAAA;AAAA,IACN,KAAK;AACH,aAAO,kBAAkB,MAAM,OAAO;AAAA,IACxC,KAAK;AACH,aAAO,gBAAgB,IAAI;AAAA,IAC7B,KAAK;AAAA,IACL,KAAK;AACH,aAAO,gBAAgB,IAAI;AAAA,IAC7B,KAAK;AACH,aAAO,CAAA;AAAA,EAAC;AAEd;AAGO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKsB;;AACpB,QAAM,QAAO,eAAU,SAAV,mBAAgB;AAC7B,MAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,SAAO;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,IACT,KAAK,EAAE,QAAQ,QAAQ,MAAM,MAAM,UAAU,QAAA;AAAA,EAAQ;AAEzD;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const UiListTree = require("../../icons/components/UiListTree.cjs");
|
|
4
|
+
const UiFolder = require("../../icons/components/UiFolder.cjs");
|
|
5
|
+
const UiFileCode = require("../../icons/components/UiFileCode.cjs");
|
|
6
|
+
const UiCollapseAll = require("../../icons/components/UiCollapseAll.cjs");
|
|
7
|
+
const LINT_GROUPING_OPTIONS = [
|
|
8
|
+
{ key: "linter-rule-file", label: "Linter · Rule · File", icon: UiListTree.UiListTree },
|
|
9
|
+
{ key: "linter-file", label: "Linter · File", icon: UiFolder.UiFolder },
|
|
10
|
+
{ key: "file-linter-rule", label: "File · Linter · Rule", icon: UiFileCode.UiFileCode },
|
|
11
|
+
{ key: "summary", label: "Summary", icon: UiCollapseAll.UiCollapseAll }
|
|
12
|
+
];
|
|
13
|
+
exports.LINT_GROUPING_OPTIONS = LINT_GROUPING_OPTIONS;
|
|
14
|
+
//# sourceMappingURL=grouping-options.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouping-options.cjs","sources":["../../../src/data/lint/grouping-options.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport { UiCollapseAll, UiFileCode, UiFolder, UiListTree } from \"../../icons\";\nimport type { LintGrouping } from \"./types\";\n\n/** The groupings a host can offer, in display order, with the label and glyph the picker shows. */\nexport const LINT_GROUPING_OPTIONS: ReadonlyArray<{\n key: LintGrouping;\n label: string;\n icon: StaticIconComponent;\n}> = [\n { key: \"linter-rule-file\", label: \"Linter · Rule · File\", icon: UiListTree },\n { key: \"linter-file\", label: \"Linter · File\", icon: UiFolder },\n { key: \"file-linter-rule\", label: \"File · Linter · Rule\", icon: UiFileCode },\n { key: \"summary\", label: \"Summary\", icon: UiCollapseAll },\n];\n"],"names":["UiListTree","UiFolder","UiFileCode","UiCollapseAll"],"mappings":";;;;;;AAKO,MAAM,wBAIR;AAAA,EACH,EAAE,KAAK,oBAAoB,OAAO,wBAAwB,MAAMA,WAAAA,WAAA;AAAA,EAChE,EAAE,KAAK,eAAe,OAAO,iBAAiB,MAAMC,SAAAA,SAAA;AAAA,EACpD,EAAE,KAAK,oBAAoB,OAAO,wBAAwB,MAAMC,WAAAA,WAAA;AAAA,EAChE,EAAE,KAAK,WAAW,OAAO,WAAW,MAAMC,cAAAA,cAAA;AAC5C;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { StaticIconComponent } from '../Icon.js';
|
|
2
|
+
import { LintGrouping } from './types.js';
|
|
3
|
+
/** The groupings a host can offer, in display order, with the label and glyph the picker shows. */
|
|
4
|
+
export declare const LINT_GROUPING_OPTIONS: ReadonlyArray<{
|
|
5
|
+
key: LintGrouping;
|
|
6
|
+
label: string;
|
|
7
|
+
icon: StaticIconComponent;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=grouping-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouping-options.d.ts","sourceRoot":"","sources":["../../../src/data/lint/grouping-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,mGAAmG;AACnG,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC;IAChD,GAAG,EAAE,YAAY,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,mBAAmB,CAAC;CAC3B,CAKA,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { UiListTree } from "../../icons/components/UiListTree.js";
|
|
2
|
+
import { UiFolder } from "../../icons/components/UiFolder.js";
|
|
3
|
+
import { UiFileCode } from "../../icons/components/UiFileCode.js";
|
|
4
|
+
import { UiCollapseAll } from "../../icons/components/UiCollapseAll.js";
|
|
5
|
+
const LINT_GROUPING_OPTIONS = [
|
|
6
|
+
{ key: "linter-rule-file", label: "Linter · Rule · File", icon: UiListTree },
|
|
7
|
+
{ key: "linter-file", label: "Linter · File", icon: UiFolder },
|
|
8
|
+
{ key: "file-linter-rule", label: "File · Linter · Rule", icon: UiFileCode },
|
|
9
|
+
{ key: "summary", label: "Summary", icon: UiCollapseAll }
|
|
10
|
+
];
|
|
11
|
+
export {
|
|
12
|
+
LINT_GROUPING_OPTIONS
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=grouping-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouping-options.js","sources":["../../../src/data/lint/grouping-options.ts"],"sourcesContent":["import type { StaticIconComponent } from \"../Icon\";\nimport { UiCollapseAll, UiFileCode, UiFolder, UiListTree } from \"../../icons\";\nimport type { LintGrouping } from \"./types\";\n\n/** The groupings a host can offer, in display order, with the label and glyph the picker shows. */\nexport const LINT_GROUPING_OPTIONS: ReadonlyArray<{\n key: LintGrouping;\n label: string;\n icon: StaticIconComponent;\n}> = [\n { key: \"linter-rule-file\", label: \"Linter · Rule · File\", icon: UiListTree },\n { key: \"linter-file\", label: \"Linter · File\", icon: UiFolder },\n { key: \"file-linter-rule\", label: \"File · Linter · Rule\", icon: UiFileCode },\n { key: \"summary\", label: \"Summary\", icon: UiCollapseAll },\n];\n"],"names":[],"mappings":";;;;AAKO,MAAM,wBAIR;AAAA,EACH,EAAE,KAAK,oBAAoB,OAAO,wBAAwB,MAAM,WAAA;AAAA,EAChE,EAAE,KAAK,eAAe,OAAO,iBAAiB,MAAM,SAAA;AAAA,EACpD,EAAE,KAAK,oBAAoB,OAAO,wBAAwB,MAAM,WAAA;AAAA,EAChE,EAAE,KAAK,WAAW,OAAO,WAAW,MAAM,cAAA;AAC5C;"}
|