diff --git a/.betterer.eslint.config.js b/.betterer.eslint.config.js
index 349ee612837..32f06b160a4 100644
--- a/.betterer.eslint.config.js
+++ b/.betterer.eslint.config.js
@@ -112,7 +112,16 @@ module.exports = [
files: ['public/**/*.tsx', 'packages/grafana-ui/**/*.tsx'],
ignores: ['public/app/plugins/**', '**/*.story.tsx', '**/*.{test,spec}.{ts,tsx}', '**/__mocks__/', 'public/test'],
rules: {
- '@grafana/no-untranslated-strings': 'error',
+ '@grafana/no-untranslated-strings': [
+ 'error',
+ {
+ forceFix: [
+ // Add paths here that are happy to be auto fixed by this rule,
+ // for example
+ // 'public/app/features/alerting'
+ ],
+ },
+ ],
'@grafana/no-translation-top-level': 'error',
},
},
diff --git a/.betterer.results b/.betterer.results
index fad77bbf86c..52b3e8a45c2 100644
--- a/.betterer.results
+++ b/.betterer.results
@@ -1423,10 +1423,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
],
"public/app/features/alerting/unified/Settings.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -1442,8 +1439,7 @@ exports[`better eslint`] = {
],
"public/app/features/alerting/unified/components/AlertLabels.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/alerting/unified/components/AnnotationDetailsField.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
@@ -1459,15 +1455,11 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/alerting/unified/components/InvalidIntervalWarning.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/alerting/unified/components/MoreButton.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -1482,9 +1474,7 @@ exports[`better eslint`] = {
"public/app/features/alerting/unified/components/Provisioning.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
],
"public/app/features/alerting/unified/components/RuleLocation.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"]
@@ -1525,10 +1515,7 @@ exports[`better eslint`] = {
"public/app/features/alerting/unified/components/alert-groups/MatcherFilter.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
],
"public/app/features/alerting/unified/components/alertmanager-entities/MuteTimingsSelector.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -1608,10 +1595,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
],
"public/app/features/alerting/unified/components/export/GrafanaModifyExport.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -1662,8 +1646,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "9"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "10"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "11"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "12"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "13"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "12"]
],
"public/app/features/alerting/unified/components/extensions/AlertInstanceExtensionPoint.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"]
@@ -1789,8 +1772,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
],
"public/app/features/alerting/unified/components/panel-alerts-tab/NewRuleFromPanelButton.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -1834,9 +1816,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "8"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "9"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "10"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "11"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "12"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "10"]
],
"public/app/features/alerting/unified/components/receivers/TemplateForm.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -1917,9 +1897,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
],
"public/app/features/alerting/unified/components/receivers/form/fields/KeyValueMapInput.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
@@ -1972,8 +1950,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "4"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "5"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
],
"public/app/features/alerting/unified/components/rule-editor/AnnotationKeyInput.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
@@ -2016,11 +1993,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "8"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "9"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "10"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "11"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "12"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "13"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "14"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "15"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "11"]
],
"public/app/features/alerting/unified/components/rule-editor/ExpressionEditor.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
@@ -2066,12 +2039,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "9"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "10"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "11"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "12"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "13"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "8"]
],
"public/app/features/alerting/unified/components/rule-editor/PreviewRule.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -2102,9 +2070,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
],
"public/app/features/alerting/unified/components/rule-editor/RecordingRuleEditor.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
@@ -2121,9 +2087,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/alerting/unified/components/rule-editor/VizWrapper.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
@@ -2160,11 +2124,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "3"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "9"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "10"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "6"]
],
"public/app/features/alerting/unified/components/rule-editor/dag.test.ts:5381": [
[0, 0, 0, "\'@grafana/runtime/src/utils/DataSourceWithBackend\' import is restricted from being used by a pattern. Import from the public export instead.", "0"]
@@ -2249,16 +2209,13 @@ exports[`better eslint`] = {
[0, 0, 0, "\'@grafana/runtime/src/services/__mocks__/dataSourceSrv\' import is restricted from being used by a pattern. Import from the public export instead.", "0"]
],
"public/app/features/alerting/unified/components/rule-editor/rule-types/GrafanaManagedAlert.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/alerting/unified/components/rule-editor/rule-types/MimirOrLokiAlert.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/alerting/unified/components/rule-editor/rule-types/MimirOrLokiRecordingRule.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/alerting/unified/components/rule-editor/rule-types/RuleTypePicker.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
@@ -2308,9 +2265,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/alerting/unified/components/rules/CloudRules.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -2383,9 +2338,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"]
],
"public/app/features/alerting/unified/components/rules/RuleConfigStatus.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/alerting/unified/components/rules/RuleDetails.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -2415,10 +2368,7 @@ exports[`better eslint`] = {
],
"public/app/features/alerting/unified/components/rules/RuleDetailsMatchingInstances.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/alerting/unified/components/rules/RuleHealth.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
@@ -2431,13 +2381,10 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "9"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
],
"public/app/features/alerting/unified/components/rules/RuleListStateSection.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/alerting/unified/components/rules/RuleState.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
@@ -2477,18 +2424,14 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "20"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "21"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "22"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "23"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "24"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "25"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "26"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "23"]
],
"public/app/features/alerting/unified/components/rules/central-state-history/utils.ts:5381": [
[0, 0, 0, "\'@grafana/data/src/field/fieldComparers\' import is restricted from being used by a pattern. Import from the public export instead.", "0"]
],
"public/app/features/alerting/unified/components/rules/state-history/LogRecordViewer.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/alerting/unified/components/rules/state-history/LokiStateHistory.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -2498,16 +2441,14 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
],
"public/app/features/alerting/unified/components/rules/state-history/StateHistory.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
],
"public/app/features/alerting/unified/components/rules/state-history/useRuleHistoryRecords.tsx:5381": [
[0, 0, 0, "\'@grafana/data/src/field/fieldComparers\' import is restricted from being used by a pattern. Import from the public export instead.", "0"]
@@ -2601,8 +2542,7 @@ exports[`better eslint`] = {
"public/app/features/alerting/unified/components/silences/SilencesFilter.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
],
"public/app/features/alerting/unified/components/silences/SilencesTable.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -2629,11 +2569,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "12"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "13"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "14"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "15"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "16"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "17"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "18"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "19"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "15"]
],
"public/app/features/alerting/unified/home/Home.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -2642,8 +2578,7 @@ exports[`better eslint`] = {
],
"public/app/features/alerting/unified/home/Insights.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/alerting/unified/home/PluginIntegrations.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
@@ -2783,8 +2718,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
],
"public/app/features/annotations/events_processing.ts:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
@@ -2836,16 +2770,12 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "6"]
],
"public/app/features/auth-config/AuthProvidersListPage.tsx:5381": [
[0, 0, 0, "\'@grafana/data/src/types/config\' import is restricted from being used by a pattern. Import from the public export instead.", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
],
"public/app/features/auth-config/ProviderConfigForm.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -2872,11 +2802,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
],
"public/app/features/auth-config/index.ts:5381": [
[0, 0, 0, "Do not use export all (\`export * from ...\`)", "0"]
@@ -2929,11 +2855,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use export all (\`export * from ...\`)", "0"]
],
"public/app/features/connections/pages/DataSourceDetailsPage.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/connections/pages/index.tsx:5381": [
[0, 0, 0, "Do not re-export imported variable (\`./AddNewConnectionPage\`)", "0"],
@@ -2957,9 +2879,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
],
"public/app/features/connections/tabs/ConnectData/NoAccessModal/index.tsx:5381": [
[0, 0, 0, "Do not use export all (\`export * from ...\`)", "0"]
@@ -3021,11 +2941,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "13"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "14"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "15"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "16"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "17"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "18"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "19"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "20"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "16"]
],
"public/app/features/dashboard-scene/inspect/HelpWizard/utils.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
@@ -3105,8 +3021,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "6"]
],
"public/app/features/dashboard-scene/saving/DashboardPrompt.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -3147,19 +3062,13 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "14"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "15"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "16"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "17"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "18"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "19"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "17"]
],
"public/app/features/dashboard-scene/saving/SaveProvisionedDashboardForm.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/dashboard-scene/saving/getDashboardChanges.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
@@ -3216,10 +3125,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/dashboard-scene/settings/JsonModelEditView.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -3227,9 +3133,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
],
"public/app/features/dashboard-scene/settings/annotations/AnnotationSettingsEdit.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -3329,9 +3233,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/dashboard-scene/settings/variables/components/GroupByVariableForm.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -3357,10 +3259,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
],
"public/app/features/dashboard-scene/settings/variables/components/SelectionOptionsForm.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -3388,8 +3287,7 @@ exports[`better eslint`] = {
],
"public/app/features/dashboard-scene/settings/version-history/RevertDashboardModal.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/dashboard-scene/settings/version-history/VersionHistoryButtons.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
@@ -3399,9 +3297,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/dashboard-scene/settings/version-history/VersionHistoryHeader.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -3563,9 +3459,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/dashboard/components/DashboardRow/index.ts:5381": [
[0, 0, 0, "Do not re-export imported variable (\`./DashboardRow\`)", "0"]
@@ -3588,8 +3482,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/dashboard/components/GenAI/MinimalisticPagination.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -3610,9 +3503,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "10"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "11"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "12"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "13"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "14"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "15"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "13"]
],
"public/app/features/dashboard/components/Inspector/PanelInspector.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
@@ -3732,12 +3623,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "9"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "10"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "11"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "12"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
],
"public/app/features/dashboard/components/SaveDashboard/UnsavedChangesModal.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -3771,11 +3657,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
],
"public/app/features/dashboard/components/SaveDashboard/useDashboardSave.tsx:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
@@ -3839,9 +3721,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
],
"public/app/features/dashboard/components/TransformationsEditor/TransformationPickerNg.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -3860,16 +3740,13 @@ exports[`better eslint`] = {
],
"public/app/features/dashboard/components/VersionHistory/RevertDashboardModal.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/dashboard/components/VersionHistory/VersionHistoryComparison.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/dashboard/components/VersionHistory/VersionHistoryTable.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -3895,8 +3772,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use any type assertions.", "0"]
],
"public/app/features/dashboard/containers/NewDashboardWithDS.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/dashboard/containers/PublicDashboardPage.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
@@ -4076,11 +3952,7 @@ exports[`better eslint`] = {
[0, 0, 0, "\'@grafana/data/src/types/config\' import is restricted from being used by a pattern. Import from the public export instead.", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/datasources/components/DashboardsTable.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -4231,9 +4103,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
],
"public/app/features/dimensions/editors/ValueMappingsEditor/ValueMappingsEditorModal.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -4290,8 +4160,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "8"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "9"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "10"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "11"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "10"]
],
"public/app/features/explore/CorrelationTransformationAddModal.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -4331,8 +4200,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/explore/FeatureTogglePage.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/explore/LiveTailButton.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
@@ -4342,8 +4210,7 @@ exports[`better eslint`] = {
"public/app/features/explore/Logs/LiveLogs.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
],
"public/app/features/explore/Logs/Logs.test.tsx:5381": [
[0, 0, 0, "\'@grafana/data/src/transformations/transformers/organize\' import is restricted from being used by a pattern. Import from the public export instead.", "0"]
@@ -4399,8 +4266,7 @@ exports[`better eslint`] = {
],
"public/app/features/explore/Logs/LogsTableMultiSelect.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/explore/Logs/LogsTableNavField.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -4434,8 +4300,7 @@ exports[`better eslint`] = {
],
"public/app/features/explore/NodeGraph/NodeGraphContainer.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/explore/PrometheusListView/RawListContainer.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -4444,8 +4309,7 @@ exports[`better eslint`] = {
],
"public/app/features/explore/PrometheusListView/RawListItem.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/explore/PrometheusListView/RawListItemAttributes.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
@@ -4490,8 +4354,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "9"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "8"]
],
"public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/TracePageSearchBar.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -4540,16 +4403,13 @@ exports[`better eslint`] = {
"public/app/features/explore/TraceView/components/TracePageHeader/TracePageHeader.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
],
"public/app/features/explore/TraceView/components/TracePageHeader/index.tsx:5381": [
[0, 0, 0, "Do not re-export imported variable (\`./TracePageHeader\`)", "0"]
],
"public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanBar.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/AccordianKeyValues.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
@@ -4557,21 +4417,16 @@ exports[`better eslint`] = {
"public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/AccordianLogs.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
],
"public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/AccordianReferences.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/AccordianText.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/SpanFlameGraph.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
@@ -4746,12 +4601,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "11"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "12"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "13"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "14"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "15"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "16"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "17"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "18"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "19"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "14"]
],
"public/app/features/expressions/components/Reduce.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -4775,8 +4625,7 @@ exports[`better eslint`] = {
],
"public/app/features/geo/editor/GazetteerPathEditor.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/geo/editor/locationModeEditor.tsx:5381": [
[0, 0, 0, "\'HorizontalGroup\' import from \'@grafana/ui\' is restricted from being used by a pattern. Use Stack component instead.", "0"]
@@ -4816,9 +4665,7 @@ exports[`better eslint`] = {
"public/app/features/inspector/InspectErrorTab.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
],
"public/app/features/inspector/InspectJSONTab.tsx:5381": [
[0, 0, 0, "Do not use the t() function outside of a component or function", "0"],
@@ -4844,8 +4691,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "7"]
],
"public/app/features/invites/InviteeRow.tsx:5381": [
- [0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
+ [0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"]
],
"public/app/features/invites/InviteesTable.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
@@ -4862,9 +4708,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "7"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "8"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "9"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "10"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "11"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "12"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "10"]
],
"public/app/features/library-panels/components/AddLibraryPanelModal/AddLibraryPanelModal.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"]
@@ -4881,8 +4725,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/library-panels/components/LibraryPanelInfo/LibraryPanelInfo.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/library-panels/components/LibraryPanelsSearch/LibraryPanelsSearch.tsx:5381": [
[0, 0, 0, "\'VerticalGroup\' import from \'@grafana/ui\' is restricted from being used by a pattern. Use Stack component instead.", "0"],
@@ -4899,8 +4742,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "6"]
],
"public/app/features/live/LiveConnectionWarning.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"]
@@ -4958,9 +4800,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "5"]
],
"public/app/features/logs/components/LogLabelStats.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/logs/components/LogRowMenuCell.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -5015,8 +4855,7 @@ exports[`better eslint`] = {
"public/app/features/manage-dashboards/components/ImportDashboardOverview.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
],
"public/app/features/manage-dashboards/components/SnapshotListTable.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"]
@@ -5074,9 +4913,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "9"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "10"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "8"]
],
"public/app/features/org/UserInvitePage.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
@@ -5094,8 +4931,7 @@ exports[`better eslint`] = {
"public/app/features/panel/components/PanelPluginError.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
],
"public/app/features/panel/components/PanelRenderer.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
@@ -5207,9 +5043,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "9"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "10"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "8"]
],
"public/app/features/plugins/admin/components/InstallControls/index.tsx:5381": [
[0, 0, 0, "Do not re-export imported variable (\`./InstallControlsButton\`)", "0"],
@@ -5226,15 +5060,11 @@ exports[`better eslint`] = {
[0, 0, 0, "\'@grafana/runtime/src/components/PluginPage\' import is restricted from being used by a pattern. Import from the public export instead.", "0"],
[0, 0, 0, "Do not use any type assertions.", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/plugins/admin/components/PluginDetailsDeprecatedWarning.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/plugins/admin/components/PluginDetailsDisabledError.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -5252,10 +5082,7 @@ exports[`better eslint`] = {
"public/app/features/plugins/admin/components/PluginDetailsPage.tsx:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
],
"public/app/features/plugins/admin/components/PluginDetailsPanel.tsx:5381": [
[0, 0, 0, "\'@grafana/runtime/src/components/PluginPage\' import is restricted from being used by a pattern. Import from the public export instead.", "0"],
@@ -5271,15 +5098,13 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/plugins/admin/components/PluginSignatureDetailsBadge.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/plugins/admin/components/PluginUsage.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/plugins/admin/components/SearchField.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"]
@@ -5305,9 +5130,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "6"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "7"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "8"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "9"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "10"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "11"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "9"]
],
"public/app/features/plugins/admin/state/actions.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
@@ -5394,8 +5217,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Do not use any type assertions.", "3"]
],
"public/app/features/profile/FeatureTogglePage.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/profile/UserOrganizations.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"]
@@ -5424,12 +5246,10 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "4"]
+ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "3"]
],
"public/app/features/query/components/QueryErrorAlert.tsx:5381": [
- [0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "0"]
],
"public/app/features/query/components/QueryGroup.tsx:5381": [
[0, 0, 0, "\'HorizontalGroup\' import from \'@grafana/ui\' is restricted from being used by a pattern. Use Stack component instead.", "0"],
@@ -5469,27 +5289,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "22"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "23"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "24"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "25"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "26"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "27"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "28"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "29"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "30"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "31"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "32"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "33"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "34"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "35"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "36"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "37"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "38"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "39"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "40"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "41"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "42"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "43"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "44"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "45"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "25"]
],
"public/app/features/query/state/DashboardQueryRunner/AnnotationsQueryRunner.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"]
@@ -5798,8 +5598,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
],
"public/app/features/trails/MetricsHeader.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
@@ -5810,8 +5609,7 @@ exports[`better eslint`] = {
],
"public/app/features/trails/TrailStore/utils.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "1"]
],
"public/app/features/trails/banners/NativeHistogramBanner.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"]
@@ -5996,9 +5794,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "3"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "4"],
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "8"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "6"]
],
"public/app/features/transformers/editors/GroupByTransformerEditor.tsx:5381": [
[0, 0, 0, "\'@grafana/data/src/transformations/transformers/groupBy\' import is restricted from being used by a pattern. Import from the public export instead.", "0"],
@@ -6114,8 +5910,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "3"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "5"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "6"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "7"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "6"]
],
"public/app/features/transformers/extractFields/extractFields.test.ts:5381": [
[0, 0, 0, "\'@grafana/data/src/dataframe/processDataFrame\' import is restricted from being used by a pattern. Import from the public export instead.", "0"],
@@ -6248,9 +6043,7 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "3"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "4"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "5"]
+ [0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
"public/app/features/users/UsersActionBar.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
@@ -6387,8 +6180,7 @@ exports[`better eslint`] = {
"public/app/features/variables/pickers/shared/VariableOptions.tsx:5381": [
[0, 0, 0, "No untranslated strings in text props. Wrap text with or use t()", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
- [0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
- [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "3"]
+ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"]
],
"public/app/features/variables/query/QueryVariableEditor.tsx:5381": [
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
diff --git a/packages/grafana-eslint-rules/rules/no-untranslated-strings.cjs b/packages/grafana-eslint-rules/rules/no-untranslated-strings.cjs
index 4e8737afe6e..02621e361c6 100644
--- a/packages/grafana-eslint-rules/rules/no-untranslated-strings.cjs
+++ b/packages/grafana-eslint-rules/rules/no-untranslated-strings.cjs
@@ -1,12 +1,28 @@
// @ts-check
+/** @typedef {import('@typescript-eslint/utils').TSESTree.Node} Node */
+/** @typedef {import('@typescript-eslint/utils').TSESTree.JSXElement} JSXElement */
+/** @typedef {import('@typescript-eslint/utils').TSESTree.JSXFragment} JSXFragment */
+/** @typedef {import('@typescript-eslint/utils').TSESLint.RuleModule<'noUntranslatedStrings' | 'noUntranslatedStringsProp' | 'wrapWithTrans' | 'wrapWithT', [{ forceFix: string[] }]>} RuleDefinition */
+
+const {
+ getNodeValue,
+ getTFixers,
+ getTransFixers,
+ canBeFixed,
+ elementIsTrans,
+ shouldBeFixed,
+} = require('./translation-utils.cjs');
+
const { ESLintUtils, AST_NODE_TYPES } = require('@typescript-eslint/utils');
const createRule = ESLintUtils.RuleCreator(
(name) => `https://github.com/grafana/grafana/blob/main/packages/grafana-eslint-rules/README.md#${name}`
);
+/** @type {string[]} */
const propsToCheck = ['label', 'description', 'placeholder', 'aria-label', 'title', 'text', 'tooltip'];
+/** @type {RuleDefinition} */
const noUntranslatedStrings = createRule({
create(context) {
return {
@@ -17,31 +33,74 @@ const noUntranslatedStrings = createRule({
const isUntranslatedProp =
(node.value.type === 'Literal' && node.value.value !== '') ||
- (node.value.type === 'JSXExpressionContainer' &&
+ (node.value.type === AST_NODE_TYPES.JSXExpressionContainer &&
(node.value.expression.type === 'Literal' || node.value.expression.type === 'TemplateLiteral'));
if (isUntranslatedProp) {
+ const errorShouldBeFixed = shouldBeFixed(context);
+ const errorCanBeFixed = canBeFixed(node, context);
return context.report({
node,
messageId: 'noUntranslatedStringsProp',
+ fix: errorShouldBeFixed && errorCanBeFixed ? getTFixers(node, context) : undefined,
+ suggest: errorCanBeFixed
+ ? [
+ {
+ messageId: 'wrapWithT',
+ fix: getTFixers(node, context),
+ },
+ ]
+ : undefined,
});
}
},
- JSXText(node) {
- const ancestors = context.sourceCode.getAncestors(node);
- const isEmpty = !node.value.trim();
- const hasTransAncestor = ancestors.some((ancestor) => {
- return (
- ancestor.type === AST_NODE_TYPES.JSXElement &&
- ancestor.openingElement.type === AST_NODE_TYPES.JSXOpeningElement &&
- ancestor.openingElement.name.type === AST_NODE_TYPES.JSXIdentifier &&
- ancestor.openingElement.name.name === 'Trans'
- );
+ /**
+ * @param {JSXElement|JSXFragment} node
+ */
+ 'JSXElement, JSXFragment'(node) {
+ const parent = node.parent;
+ const children = node.children;
+ const untranslatedTextNodes = children.filter((child) => {
+ if (child.type === AST_NODE_TYPES.JSXText) {
+ const hasValue = child.value.trim();
+ if (!hasValue) {
+ return false;
+ }
+ const ancestors = context.sourceCode.getAncestors(node);
+ const hasTransAncestor =
+ elementIsTrans(node) ||
+ ancestors.some((ancestor) => {
+ return elementIsTrans(ancestor);
+ });
+ return !hasTransAncestor;
+ }
+ return false;
});
- if (!isEmpty && !hasTransAncestor) {
+
+ const parentHasChildren =
+ parent.type === AST_NODE_TYPES.JSXElement || parent.type === AST_NODE_TYPES.JSXFragment;
+
+ // We don't want to report if the parent has a text node,
+ // as we'd end up doing it twice. This makes it awkward for us to auto fix
+ const parentHasText = parentHasChildren
+ ? parent.children.some((child) => child.type === AST_NODE_TYPES.JSXText && getNodeValue(child).trim())
+ : false;
+
+ if (untranslatedTextNodes.length && !parentHasText) {
+ const errorShouldBeFixed = shouldBeFixed(context);
+ const errorCanBeFixed = canBeFixed(node, context);
context.report({
node,
messageId: 'noUntranslatedStrings',
+ fix: errorShouldBeFixed && errorCanBeFixed ? getTransFixers(node, context) : undefined,
+ suggest: errorCanBeFixed
+ ? [
+ {
+ messageId: 'wrapWithTrans',
+ fix: getTransFixers(node, context),
+ },
+ ]
+ : undefined,
});
}
},
@@ -50,16 +109,34 @@ const noUntranslatedStrings = createRule({
name: 'no-untranslated-strings',
meta: {
type: 'suggestion',
+ hasSuggestions: true,
+ fixable: 'code',
docs: {
description: 'Check untranslated strings',
},
messages: {
noUntranslatedStrings: 'No untranslated strings. Wrap text with ',
noUntranslatedStringsProp: `No untranslated strings in text props. Wrap text with or use t()`,
+ wrapWithTrans: 'Wrap text with for manual key assignment',
+ wrapWithT: 'Wrap text with t() for manual key assignment',
},
- schema: [],
+ schema: [
+ {
+ type: 'object',
+ properties: {
+ forceFix: {
+ type: 'array',
+ items: {
+ type: 'string',
+ },
+ uniqueItems: true,
+ },
+ },
+ additionalProperties: false,
+ },
+ ],
},
- defaultOptions: [],
+ defaultOptions: [{ forceFix: [] }],
});
module.exports = noUntranslatedStrings;
diff --git a/packages/grafana-eslint-rules/rules/translation-utils.cjs b/packages/grafana-eslint-rules/rules/translation-utils.cjs
new file mode 100644
index 00000000000..3b23b8dd9ba
--- /dev/null
+++ b/packages/grafana-eslint-rules/rules/translation-utils.cjs
@@ -0,0 +1,310 @@
+// @ts-check
+/** @typedef {import('@typescript-eslint/utils').TSESTree.Node} Node */
+/** @typedef {import('@typescript-eslint/utils').TSESTree.JSXAttribute} JSXAttribute */
+/** @typedef {import('@typescript-eslint/utils').TSESTree.JSXElement} JSXElement */
+/** @typedef {import('@typescript-eslint/utils').TSESTree.JSXFragment} JSXFragment */
+/** @typedef {import('@typescript-eslint/utils').TSESTree.JSXText} JSXText */
+/** @typedef {import('@typescript-eslint/utils').TSESTree.JSXChild} JSXChild */
+/** @typedef {import('@typescript-eslint/utils/ts-eslint').RuleFixer} RuleFixer */
+/** @typedef {import('@typescript-eslint/utils/ts-eslint').RuleContext<'noUntranslatedStrings' | 'noUntranslatedStringsProp' | 'wrapWithTrans' | 'wrapWithT', [{forceFix: string[]}]>} RuleContextWithOptions */
+
+const { AST_NODE_TYPES } = require('@typescript-eslint/utils');
+
+/**
+ * @param {Node} node
+ */
+const elementIsTrans = (node) => {
+ return (
+ node.type === AST_NODE_TYPES.JSXElement &&
+ node.openingElement.type === AST_NODE_TYPES.JSXOpeningElement &&
+ node.openingElement.name.type === AST_NODE_TYPES.JSXIdentifier &&
+ node.openingElement.name.name === 'Trans'
+ );
+};
+
+/**
+ * Converts a string to kebab case
+ * @param {string} str The string to convert
+ * @returns {string} The kebab case string
+ */
+function toKebabCase(str) {
+ return str
+ .replace(/([a-z])([A-Z])/g, '$1-$2')
+ .toLowerCase()
+ .replace(/\s+/g, '-');
+}
+
+/**
+ * Checks if we _should_ fix an error automatically
+ * @param {RuleContextWithOptions} context
+ * @returns {boolean} Whether the node should be fixed
+ */
+function shouldBeFixed(context) {
+ const pathsThatAreFixable = context.options[0]?.forceFix || [];
+ return pathsThatAreFixable.some((path) => context.filename.includes(path));
+}
+
+/**
+ * Checks if a node can be fixed automatically
+ * @param {JSXAttribute|JSXElement|JSXFragment} node The node to check
+ * @param {RuleContextWithOptions} context
+ * @returns {boolean} Whether the node can be fixed
+ */
+function canBeFixed(node, context) {
+ if (!getTranslationPrefix(context)) {
+ return false;
+ }
+
+ // We can only fix JSX attribute strings that are within a function,
+ // otherwise the `t` function call will be made too early
+
+ if (node.type === AST_NODE_TYPES.JSXAttribute) {
+ const ancestors = context.sourceCode.getAncestors(node);
+ const isInFunction = ancestors.some((anc) => {
+ return [
+ AST_NODE_TYPES.ArrowFunctionExpression,
+ AST_NODE_TYPES.FunctionDeclaration,
+ AST_NODE_TYPES.ClassDeclaration,
+ ].includes(anc.type);
+ });
+ if (!isInFunction) {
+ return false;
+ }
+ if (node.value?.type === AST_NODE_TYPES.JSXExpressionContainer) {
+ return false;
+ }
+ }
+
+ const values =
+ node.type === AST_NODE_TYPES.JSXElement || node.type === AST_NODE_TYPES.JSXFragment
+ ? node.children.map((child) => {
+ return getNodeValue(child);
+ })
+ : [getNodeValue(node)];
+
+ const stringIsTooLong = values.some((value) => value.trim().split(' ').length > 10);
+ // If we have more than 10 words,
+ // we don't want to fix it automatically as the chance of a duplicate key is higher,
+ // and it's better for a user to manually decide the key
+ if (stringIsTooLong) {
+ return false;
+ }
+ const stringIsNonAlphanumeric = values.some((value) => !/[a-zA-Z0-9]/.test(value));
+ const stringContainsHTMLEntities = values.some((value) => /(&[a-zA-Z0-9]+;)/.test(value));
+ // If node only contains non-alphanumeric characters,
+ // or contains HTML character entities, then we don't want to autofix
+ if (stringIsNonAlphanumeric || stringContainsHTMLEntities) {
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Gets the translation prefix from the filename
+ * @param {RuleContextWithOptions} context
+ * @returns {string|null} The translation prefix or null
+ */
+function getTranslationPrefix(context) {
+ const filename = context.getFilename();
+ const match = filename.match(/public\/app\/features\/([^/]+)/);
+ if (match) {
+ return match[1];
+ }
+ return null;
+}
+
+/**
+ * Gets the i18n key for a node
+ * @param {JSXAttribute|JSXText} node The node
+ * @param {RuleContextWithOptions} context
+ * @returns {string} The i18n key
+ */
+const getI18nKey = (node, context) => {
+ const prefixFromFilePath = getTranslationPrefix(context);
+ const stringValue = getNodeValue(node);
+
+ const componentNames = getComponentNames(node, context);
+ const words = stringValue
+ .trim()
+ .replace(/[^\a-zA-Z\s]/g, '')
+ .trim()
+ .split(/\s+/);
+
+ const maxWordsForKey = 6;
+
+ // If we have more than 6 words, filter out the words that are less than 4 characters
+ // This heuristic tends to result in a good balance between unique and descriptive keys
+ const filteredWords = words.length > maxWordsForKey ? words.filter((word) => word.length > 4) : words;
+
+ // If we've filtered everything out, use the original words, deduplicated
+ const wordsToUse = filteredWords.length === 0 ? words : filteredWords;
+ const uniqueWords = [...new Set(wordsToUse)].slice(0, maxWordsForKey);
+
+ let kebabString = toKebabCase(uniqueWords.join(' '));
+
+ if (node.type === AST_NODE_TYPES.JSXAttribute) {
+ const propName = node.name.name;
+ const attribute = node.parent?.attributes.find(
+ (attr) =>
+ attr.type === AST_NODE_TYPES.JSXAttribute &&
+ attr.name.type === AST_NODE_TYPES.JSXIdentifier &&
+ attr &&
+ ['id', 'data-testid'].includes(attr.name?.name)
+ );
+ const potentialId =
+ attribute &&
+ attribute.type === AST_NODE_TYPES.JSXAttribute &&
+ attribute.value &&
+ attribute.value.type === AST_NODE_TYPES.Literal
+ ? attribute.value.value
+ : undefined;
+ kebabString = [potentialId, propName, kebabString].filter(Boolean).join('-');
+ }
+
+ const fullPrefix = [prefixFromFilePath, ...componentNames, kebabString].filter(Boolean).join('.');
+
+ return fullPrefix;
+};
+
+/**
+ * Gets component names from ancestors
+ * @param {JSXAttribute|JSXText} node The node
+ * @param {RuleContextWithOptions} context
+ * @returns {string[]} The component names
+ */
+function getComponentNames(node, context) {
+ const names = [];
+ const ancestors = context.sourceCode.getAncestors(node);
+
+ for (const ancestor of ancestors) {
+ if (
+ ancestor.type === AST_NODE_TYPES.VariableDeclarator ||
+ ancestor.type === AST_NODE_TYPES.FunctionDeclaration ||
+ ancestor.type === AST_NODE_TYPES.ClassDeclaration
+ ) {
+ const name = ancestor.id?.type === AST_NODE_TYPES.Identifier ? ancestor.id.name : '';
+ // Remove the word "component" from the name, as this is a bit
+ // redundant in a translation key
+ const sanitizedName = name.replace(/component/gi, '');
+ names.push(toKebabCase(sanitizedName));
+ }
+ }
+
+ return names;
+}
+
+/**
+ * Gets the import fixer for a node
+ * @param {JSXElement|JSXFragment|JSXAttribute} node
+ * @param {RuleFixer} fixer The fixer
+ * @param {string} importName The import name
+ * @param {RuleContextWithOptions} context
+ * @returns {import('@typescript-eslint/utils/ts-eslint').RuleFix|undefined} The fix
+ */
+function getImportsFixer(node, fixer, importName, context) {
+ const body = context.sourceCode.ast.body;
+
+ const existingAppCoreI18n = body.find(
+ (node) => node.type === AST_NODE_TYPES.ImportDeclaration && node.source.value === 'app/core/internationalization'
+ );
+
+ // If there's no existing import at all, add it
+ if (!existingAppCoreI18n) {
+ return fixer.insertTextBefore(body[0], `import { ${importName} } from 'app/core/internationalization';\n`);
+ }
+
+ // To keep the typechecker happy - we have to explicitly check the type
+ // so we can infer it further down
+ if (existingAppCoreI18n.type !== AST_NODE_TYPES.ImportDeclaration) {
+ return;
+ }
+
+ // If there's an existing import, and it already has the importName, do nothing
+ if (
+ existingAppCoreI18n.specifiers.some((s) => {
+ return (
+ s.type === AST_NODE_TYPES.ImportSpecifier &&
+ s.imported.type === AST_NODE_TYPES.Identifier &&
+ s.imported.name === importName
+ );
+ })
+ ) {
+ return;
+ }
+ const lastSpecifier = existingAppCoreI18n.specifiers[existingAppCoreI18n.specifiers.length - 1];
+ /** @type {[number, number]} */
+ const range = [lastSpecifier.range[1], lastSpecifier.range[1]];
+ return fixer.insertTextAfterRange(range, `, ${importName}`);
+}
+
+/**
+ * @param {JSXElement|JSXFragment} node
+ * @param {RuleContextWithOptions} context
+ * @returns {(fixer: RuleFixer) => import('@typescript-eslint/utils/ts-eslint').RuleFix[]}
+ */
+const getTransFixers = (node, context) => (fixer) => {
+ const fixes = [];
+ const children = node.children;
+ children.forEach((child) => {
+ if (child.type === AST_NODE_TYPES.JSXText) {
+ const i18nKey = getI18nKey(child, context);
+ const value = getNodeValue(child);
+ fixes.push(fixer.replaceText(child, `${value}`));
+ }
+ });
+
+ const importsFixer = getImportsFixer(node, fixer, 'Trans', context);
+ if (importsFixer) {
+ fixes.push(importsFixer);
+ }
+ return fixes;
+};
+
+/**
+ * @param {JSXAttribute} node
+ * @param {RuleContextWithOptions} context
+ * @returns {(fixer: RuleFixer) => import('@typescript-eslint/utils/ts-eslint').RuleFix[]}
+ */
+const getTFixers = (node, context) => (fixer) => {
+ const fixes = [];
+ const i18nKey = getI18nKey(node, context);
+ const value = getNodeValue(node);
+ const wrappingQuotes = value.includes('"') ? "'" : '"';
+
+ fixes.push(
+ fixer.replaceText(node, `${node.name.name}={t("${i18nKey}", ${wrappingQuotes}${value}${wrappingQuotes})}`)
+ );
+
+ const importsFixer = getImportsFixer(node, fixer, 't', context);
+ if (importsFixer) {
+ fixes.push(importsFixer);
+ }
+ return fixes;
+};
+
+/**
+ * Gets the value of a node
+ * @param {JSXAttribute|JSXText|JSXElement|JSXFragment|JSXChild} node The node
+ * @returns {string} The node value
+ */
+function getNodeValue(node) {
+ if (node.type === AST_NODE_TYPES.JSXAttribute && node.value?.type === AST_NODE_TYPES.Literal) {
+ return String(node.value.value) || '';
+ }
+ if (node.type === AST_NODE_TYPES.JSXText) {
+ // Return the raw value if we can, so we can work out if there are any HTML entities
+ return node.raw;
+ }
+ return '';
+}
+
+module.exports = {
+ getNodeValue,
+ getTFixers,
+ getTransFixers,
+ getTranslationPrefix,
+ canBeFixed,
+ shouldBeFixed,
+ elementIsTrans,
+};
diff --git a/packages/grafana-eslint-rules/tests/no-untranslated-strings.test.js b/packages/grafana-eslint-rules/tests/no-untranslated-strings.test.js
new file mode 100644
index 00000000000..b180e67af7a
--- /dev/null
+++ b/packages/grafana-eslint-rules/tests/no-untranslated-strings.test.js
@@ -0,0 +1,453 @@
+import { RuleTester } from 'eslint';
+
+import noUntranslatedStrings from '../rules/no-untranslated-strings.cjs';
+
+RuleTester.setDefaultConfig({
+ languageOptions: {
+ ecmaVersion: 2018,
+ sourceType: 'module',
+ parserOptions: {
+ ecmaFeatures: {
+ jsx: true,
+ },
+ },
+ },
+});
+
+const filename = 'public/app/features/some-feature/SomeFile.tsx';
+
+const ruleTester = new RuleTester();
+
+ruleTester.run('eslint no-untranslated-strings', noUntranslatedStrings, {
+ test: [],
+ valid: [
+ {
+ name: 'Text in Trans component',
+ code: `const Foo = () => Translated text`,
+ },
+ {
+ name: 'Text in Trans component with whitespace/JSXText elements',
+ code: `const Foo = () =>
+
+ Translated text
+ `,
+ },
+ {
+ name: 'Empty component',
+ code: `
`,
+ },
+ {
+ name: 'Text using t() function',
+ code: `{t('translated.key', 'Translated text')}
`,
+ },
+ {
+ name: 'Prop using t() function',
+ code: ``,
+ },
+ {
+ name: 'Variable interpolation',
+ code: `{variable}
`,
+ },
+ ],
+ invalid: [
+ /**
+ * FIXABLE CASES
+ */
+ // Basic happy path case:
+ // untranslated text, in a component, in a file location where we can extract a prefix,
+ // and it can be fixed
+ {
+ name: 'Basic untranslated text in component',
+ code: `
+const Foo = () => Untranslated text
`,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStrings',
+ suggestions: [
+ {
+ messageId: 'wrapWithTrans',
+ output: `
+import { Trans } from 'app/core/internationalization';
+const Foo = () => Untranslated text
`,
+ },
+ ],
+ },
+ ],
+ },
+
+ {
+ name: 'Text inside JSXElement, not in a function',
+ code: `const thing = foo
`,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStrings',
+ suggestions: [
+ {
+ messageId: 'wrapWithTrans',
+ output: `import { Trans } from 'app/core/internationalization';
+const thing = foo
`,
+ },
+ ],
+ },
+ ],
+ },
+
+ {
+ name: 'Fixes medium length strings',
+ code: `
+const Foo = () => This is a longer string that we will translate
`,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStrings',
+ suggestions: [
+ {
+ messageId: 'wrapWithTrans',
+ output: `
+import { Trans } from 'app/core/internationalization';
+const Foo = () => This is a longer string that we will translate
`,
+ },
+ ],
+ },
+ ],
+ },
+
+ {
+ name: 'Fixes short strings with many words',
+ code: `
+const Foo = () => lots of sho rt word s to be filt ered
`,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStrings',
+ suggestions: [
+ {
+ messageId: 'wrapWithTrans',
+ output: `
+import { Trans } from 'app/core/internationalization';
+const Foo = () => lots of sho rt word s to be filt ered
`,
+ },
+ ],
+ },
+ ],
+ },
+
+ {
+ name: 'expression',
+ code: `
+const foo = <>hello>`,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStrings',
+ suggestions: [
+ {
+ messageId: 'wrapWithTrans',
+ output: `
+import { Trans } from 'app/core/internationalization';
+const foo = <>hello>`,
+ },
+ ],
+ },
+ ],
+ },
+
+ {
+ name: 'Fixes strings in JSX in props',
+ code: `
+const Foo = () => Test>} />
`,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStrings',
+ suggestions: [
+ {
+ messageId: 'wrapWithTrans',
+ output: `
+import { Trans } from 'app/core/internationalization';
+const Foo = () => Test>} />
`,
+ },
+ ],
+ },
+ ],
+ },
+
+ {
+ name: 'Fixes and uses ID from attribute if exists',
+ code: `
+import { t } from 'app/core/internationalization';
+const Foo = () => `,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStringsProp',
+ suggestions: [
+ {
+ messageId: 'wrapWithT',
+ output: `
+import { t } from 'app/core/internationalization';
+const Foo = () => `,
+ },
+ ],
+ },
+ ],
+ },
+
+ {
+ name: 'Fixes correctly when Trans import already exists',
+ code: `
+import { Trans } from 'app/core/internationalization';
+const Foo = () => Untranslated text
`,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStrings',
+ suggestions: [
+ {
+ messageId: 'wrapWithTrans',
+ output: `
+import { Trans } from 'app/core/internationalization';
+const Foo = () => Untranslated text
`,
+ },
+ ],
+ },
+ ],
+ },
+
+ {
+ name: 'Fixes correctly when t() import already exists',
+ code: `
+import { t } from 'app/core/internationalization';
+const Foo = () => `,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStringsProp',
+ suggestions: [
+ {
+ messageId: 'wrapWithT',
+ output: `
+import { t } from 'app/core/internationalization';
+const Foo = () => `,
+ },
+ ],
+ },
+ ],
+ },
+
+ {
+ name: 'Fixes correctly when import exists but needs to add t()',
+ code: `
+import { Trans } from 'app/core/internationalization';
+const Foo = () => `,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStringsProp',
+ suggestions: [
+ {
+ messageId: 'wrapWithT',
+ output: `
+import { Trans, t } from 'app/core/internationalization';
+const Foo = () => `,
+ },
+ ],
+ },
+ ],
+ },
+
+ {
+ name: 'Fixes correctly with a Class component',
+ code: `
+class Foo extends React.Component {
+ render() {
+ return untranslated text
;
+ }
+}`,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStrings',
+ suggestions: [
+ {
+ messageId: 'wrapWithTrans',
+ output: `
+import { Trans } from 'app/core/internationalization';
+class Foo extends React.Component {
+ render() {
+ return untranslated text
;
+ }
+}`,
+ },
+ ],
+ },
+ ],
+ },
+
+ {
+ name: 'Fixes basic prop case',
+ code: `
+const Foo = () => `,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStringsProp',
+ suggestions: [
+ {
+ messageId: 'wrapWithT',
+ output: `
+import { t } from 'app/core/internationalization';
+const Foo = () => `,
+ },
+ ],
+ },
+ ],
+ },
+
+ {
+ name: 'Fixes prop case with double quotes in value',
+ code: `
+const Foo = () => `,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStringsProp',
+ suggestions: [
+ {
+ messageId: 'wrapWithT',
+ output: `
+import { t } from 'app/core/internationalization';
+const Foo = () => `,
+ },
+ ],
+ },
+ ],
+ },
+
+ {
+ name: 'Fixes case with nested functions/components',
+ code: `
+import { Trans } from 'app/core/internationalization';
+const Foo = () => {
+ const getSomething = () => {
+ return foo
;
+ }
+
+ return {getSomething()}
;
+}
+`,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStrings',
+ suggestions: [
+ {
+ messageId: 'wrapWithTrans',
+ output: `
+import { Trans } from 'app/core/internationalization';
+const Foo = () => {
+ const getSomething = () => {
+ return foo
;
+ }
+
+ return {getSomething()}
;
+}
+`,
+ },
+ ],
+ },
+ ],
+ },
+
+ /**
+ * UNFIXABLE CASES
+ */
+
+ {
+ name: 'Multiple untranslated strings in one element',
+ code: `const Foo = () => test {name} example
`,
+ filename,
+ errors: [
+ {
+ messageId: 'noUntranslatedStrings',
+ },
+ ],
+ },
+
+ {
+ name: 'Cannot fix entirely non-alphanumeric text',
+ code: `const Foo = () => -
`,
+ filename,
+ errors: [{ messageId: 'noUntranslatedStrings' }],
+ },
+ {
+ name: 'Cannot fix text with expression sibling',
+ code: `const Foo = () => {name} Hello
`,
+ filename,
+ errors: [{ messageId: 'noUntranslatedStrings' }],
+ },
+
+ {
+ name: 'Cannot fix text with expression sibling in fragment',
+ code: `
+const Foo = () => {
+ const bar = {
+ baz: (<>Hello {name}>)
+ }
+}`,
+ filename,
+ errors: [{ messageId: 'noUntranslatedStrings' }],
+ },
+
+ {
+ name: 'Cannot fix text containing HTML entities',
+ code: `const Foo = () => Something
`,
+ filename,
+ errors: [{ messageId: 'noUntranslatedStrings' }],
+ },
+
+ {
+ name: 'Cannot fix text that is too long',
+ code: `const Foo = () => This is something with lots of text that we don't want to translate automatically
`,
+ filename,
+ errors: [{ messageId: 'noUntranslatedStrings' }],
+ },
+
+ {
+ name: 'Cannot fix prop text that is too long',
+ code: `const Foo = () => `,
+ filename,
+ errors: [{ messageId: 'noUntranslatedStringsProp' }],
+ },
+
+ {
+ name: 'Cannot fix text with HTML sibling',
+ code: `const Foo = () => something foo bar
`,
+ filename,
+ errors: [{ messageId: 'noUntranslatedStrings' }],
+ },
+
+ {
+ name: 'JSXAttribute not in a function',
+ code: ``,
+ filename,
+ errors: [{ messageId: 'noUntranslatedStringsProp' }],
+ },
+
+ {
+ name: 'Cannot fix JSXExpression in attribute',
+ code: `const Foo = () => `,
+ filename,
+ errors: [{ messageId: 'noUntranslatedStringsProp' }],
+ },
+
+ {
+ name: 'Cannot fix text outside correct directory location',
+ code: `const Foo = () => Untranslated text
`,
+ filename: 'public/something-else/foo/SomeOtherFile.tsx',
+ errors: [{ messageId: 'noUntranslatedStrings' }],
+ },
+ ],
+});