You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2025/01/09 03:46:10 UTC

(superset) branch disable-namespace-imports updated: disabling wildcard imports with eslint

This is an automated email from the ASF dual-hosted git repository.

rusackas pushed a commit to branch disable-namespace-imports
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/disable-namespace-imports by this push:
     new eafb47c86a disabling wildcard imports with eslint
eafb47c86a is described below

commit eafb47c86ac2f2fc8043a02d07da03ef9f103ccb
Author: Evan Rusackas <ev...@rusackas.com>
AuthorDate: Wed Jan 8 20:45:58 2025 -0700

    disabling wildcard imports with eslint
---
 superset-frontend/.eslintrc.js                                |  6 ++++++
 .../cypress-base/cypress/e2e/dashboard/editmode.test.ts       |  4 ++--
 .../plugins/legacy-preset-chart-deckgl/src/layers/common.tsx  | 11 +++++++----
 .../plugins/legacy-preset-chart-deckgl/src/utils/sandbox.ts   |  1 +
 .../src/SqlLab/components/ScheduleQueryButton/index.tsx       |  4 ++--
 .../controls/ZoomConfigControl/ZoomConfigsChart.tsx           |  4 ++--
 .../explore/components/controls/ZoomConfigControl/zoomUtil.ts |  6 +++---
 7 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/superset-frontend/.eslintrc.js b/superset-frontend/.eslintrc.js
index 9777651427..d2ed09e69e 100644
--- a/superset-frontend/.eslintrc.js
+++ b/superset-frontend/.eslintrc.js
@@ -193,6 +193,12 @@ module.exports = {
             message:
               'Default React import is not required due to automatic JSX runtime in React 16.4',
           },
+          {
+            // this disallows wildcard imports from modules (but allows them for local files with `./` or `src/`)
+            selector:
+              'ImportNamespaceSpecifier[parent.source.value!=/^(\\.|src)/]',
+            message: 'Wildcard imports are not allowed',
+          },
         ],
       },
       settings: {
diff --git a/superset-frontend/cypress-base/cypress/e2e/dashboard/editmode.test.ts b/superset-frontend/cypress-base/cypress/e2e/dashboard/editmode.test.ts
index 0bc2ddc91b..3845b34bb9 100644
--- a/superset-frontend/cypress-base/cypress/e2e/dashboard/editmode.test.ts
+++ b/superset-frontend/cypress-base/cypress/e2e/dashboard/editmode.test.ts
@@ -22,7 +22,7 @@ import {
   TABBED_DASHBOARD,
 } from 'cypress/utils/urls';
 import { drag, resize, waitForChartLoad } from 'cypress/utils';
-import * as ace from 'brace';
+import { edit } from 'brace';
 import {
   interceptExploreUpdate,
   interceptGet,
@@ -72,7 +72,7 @@ function assertMetadata(text: string) {
 
       // cypress can read this locally, but not in ci
       // so we have to use the ace module directly to fetch the value
-      expect(ace.edit(metadata).getValue()).to.match(regex);
+      expect(edit(metadata).getValue()).to.match(regex);
     });
 }
 
diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/common.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/common.tsx
index 80f0371e5c..4ff84f90e4 100644
--- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/common.tsx
+++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/common.tsx
@@ -17,7 +17,10 @@
  * under the License.
  */
 import { ReactNode } from 'react';
-import * as d3array from 'd3-array';
+import d3array, {
+  ascending as d3ascending,
+  quantile as d3quantile,
+} from 'd3-array';
 import { JsonObject, JsonValue, QueryFormData } from '@superset-ui/core';
 import sandboxedEval from '../utils/sandbox';
 import { TooltipProps } from '../components/Tooltip';
@@ -93,13 +96,13 @@ export function getAggFunc(
       let sortedArr;
       if (accessor) {
         sortedArr = arr.sort((o1: JsonObject, o2: JsonObject) =>
-          d3array.ascending(accessor(o1), accessor(o2)),
+          d3ascending(accessor(o1), accessor(o2)),
         );
       } else {
-        sortedArr = arr.sort(d3array.ascending);
+        sortedArr = arr.sort(d3ascending);
       }
 
-      return d3array.quantile(sortedArr, percentiles[type], acc);
+      return d3quantile(sortedArr, percentiles[type], acc);
     };
   } else {
     d3func = d3array[type];
diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/sandbox.ts b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/sandbox.ts
index bf41f1f200..eee8467919 100644
--- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/sandbox.ts
+++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/sandbox.ts
@@ -19,6 +19,7 @@
 // A safe alternative to JS's eval
 import vm, { Context, RunningScriptOptions } from 'vm';
 import _ from 'underscore';
+/* eslint-ignore-next-line no-restricted-syntax*/
 import * as d3array from 'd3-array';
 import * as colors from './colors';
 
diff --git a/superset-frontend/src/SqlLab/components/ScheduleQueryButton/index.tsx b/superset-frontend/src/SqlLab/components/ScheduleQueryButton/index.tsx
index 83f49feef5..c87d8c6938 100644
--- a/superset-frontend/src/SqlLab/components/ScheduleQueryButton/index.tsx
+++ b/superset-frontend/src/SqlLab/components/ScheduleQueryButton/index.tsx
@@ -24,7 +24,7 @@ import validator from '@rjsf/validator-ajv8';
 import { Row, Col } from 'src/components';
 import { Input, TextArea } from 'src/components/Input';
 import { t, styled } from '@superset-ui/core';
-import * as chrono from 'chrono-node';
+import { parseDate } from 'chrono-node';
 import ModalTrigger, { ModalTriggerRef } from 'src/components/ModalTrigger';
 import { Form, FormItem } from 'src/components/Form';
 import Button from 'src/components/Button';
@@ -50,7 +50,7 @@ const getJSONSchema = () => {
           jsonSchema.properties[key] = {
             ...value,
             default: value.default
-              ? chrono.parseDate(value.default)?.toISOString()
+              ? parseDate(value.default)?.toISOString()
               : null,
           };
         }
diff --git a/superset-frontend/src/explore/components/controls/ZoomConfigControl/ZoomConfigsChart.tsx b/superset-frontend/src/explore/components/controls/ZoomConfigControl/ZoomConfigsChart.tsx
index 0d4b44b532..d3f755bd03 100644
--- a/superset-frontend/src/explore/components/controls/ZoomConfigControl/ZoomConfigsChart.tsx
+++ b/superset-frontend/src/explore/components/controls/ZoomConfigControl/ZoomConfigsChart.tsx
@@ -17,7 +17,7 @@
  * under the License.
  */
 import { t } from '@superset-ui/core';
-import * as echarts from 'echarts';
+import { init as echartsInit } from 'echarts';
 import { createRef, FC, useEffect } from 'react';
 import { ZoomConfigsChartProps } from './types';
 import {
@@ -48,7 +48,7 @@ export const ZoomConfigsChart: FC<ZoomConfigsChartProps> = ({
     const barWidth = 15;
     const data = zoomConfigsToData(value.values);
 
-    const chart = echarts.init(ref.current);
+    const chart = echartsInit(ref.current);
 
     const option = {
       xAxis: {
diff --git a/superset-frontend/src/explore/components/controls/ZoomConfigControl/zoomUtil.ts b/superset-frontend/src/explore/components/controls/ZoomConfigControl/zoomUtil.ts
index 281c7aba5a..6dce39c21e 100644
--- a/superset-frontend/src/explore/components/controls/ZoomConfigControl/zoomUtil.ts
+++ b/superset-frontend/src/explore/components/controls/ZoomConfigControl/zoomUtil.ts
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-import * as echarts from 'echarts';
+import { util } from 'echarts';
 import { isZoomConfigsFixed, isZoomConfigsLinear } from './typeguards';
 import {
   CreateDragGraphicOption,
@@ -105,10 +105,10 @@ export const createDragGraphicOption = ({
     // Give a big z value, which makes the circle cover the symbol
     // in bar series.
     z: 100,
-    // Util method `echarts.util.curry` is used here to generate a
+    // Util method `util.curry` (from echarts) is used here to generate a
     // new function the same as `onDrag`, except that the
     // first parameter is fixed to be the `dataIndex` here.
-    ondrag: echarts.util.curry(onDrag, dataIndex),
+    ondrag: util.curry(onDrag, dataIndex),
   };
 };