This is an automated email from the ASF dual-hosted git repository.
michaelsmolina pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 1f76944c2b1 fix: Add editors to ContributionConfig and additional
properties to EditorKeyword (#38098)
1f76944c2b1 is described below
commit 1f76944c2b175a9bc2a46320bbd072fe193749fd
Author: Michael S. Molina <[email protected]>
AuthorDate: Thu Feb 19 15:00:21 2026 -0300
fix: Add editors to ContributionConfig and additional properties to
EditorKeyword (#38098)
---
superset-core/src/superset_core/extensions/types.py | 4 ++++
superset-frontend/packages/superset-core/src/api/editors.ts | 4 ++++
.../src/SqlLab/components/EditorWrapper/useKeywords.test.ts | 4 ++--
superset-frontend/src/SqlLab/components/EditorWrapper/useKeywords.ts | 2 +-
superset-frontend/src/core/editors/AceEditorProvider.tsx | 2 ++
.../controls/DndColumnSelectControl/ColumnSelectPopover.test.tsx | 4 ++--
superset-frontend/src/explore/controlUtils/getColumnKeywords.test.tsx | 2 +-
superset-frontend/src/explore/controlUtils/getColumnKeywords.tsx | 2 +-
8 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/superset-core/src/superset_core/extensions/types.py
b/superset-core/src/superset_core/extensions/types.py
index a75c3425e43..82f4d5a85eb 100644
--- a/superset-core/src/superset_core/extensions/types.py
+++ b/superset-core/src/superset_core/extensions/types.py
@@ -88,6 +88,10 @@ class ContributionConfig(BaseModel):
default_factory=dict,
description="Menu contributions by scope and location",
)
+ editors: list[dict[str, Any]] = Field(
+ default_factory=list,
+ description="Editor contributions",
+ )
class BaseExtension(BaseModel):
diff --git a/superset-frontend/packages/superset-core/src/api/editors.ts
b/superset-frontend/packages/superset-core/src/api/editors.ts
index 94871105a31..d2b63d2beca 100644
--- a/superset-frontend/packages/superset-core/src/api/editors.ts
+++ b/superset-frontend/packages/superset-core/src/api/editors.ts
@@ -294,6 +294,10 @@ export interface EditorKeyword {
meta?: string;
/** Sorting priority; higher scores appear first in the completion list */
score?: number;
+ /** Short supplementary text such as a type signature or the full value when
truncated */
+ detail?: string;
+ /** Longer documentation content as an HTML string, shown in a documentation
popup */
+ documentation?: string;
}
/**
diff --git
a/superset-frontend/src/SqlLab/components/EditorWrapper/useKeywords.test.ts
b/superset-frontend/src/SqlLab/components/EditorWrapper/useKeywords.test.ts
index 9aa7dcdacfd..60c6d5095f5 100644
--- a/superset-frontend/src/SqlLab/components/EditorWrapper/useKeywords.test.ts
+++ b/superset-frontend/src/SqlLab/components/EditorWrapper/useKeywords.test.ts
@@ -295,7 +295,7 @@ test('returns column keywords among selected tables', async
() => {
);
});
-test('returns long keywords with docText', async () => {
+test('returns long keywords with detail', async () => {
const expectLongKeywordDbId = 2;
const longKeyword = 'veryveryveryveryverylongtablename';
const dbFunctionNamesApiRoute =
`glob:*/api/v1/database/${expectLongKeywordDbId}/function_names/`;
@@ -335,7 +335,7 @@ test('returns long keywords with docText', async () => {
expect.objectContaining({
name: longKeyword,
value: longKeyword,
- docText: longKeyword,
+ detail: longKeyword,
}),
),
);
diff --git
a/superset-frontend/src/SqlLab/components/EditorWrapper/useKeywords.ts
b/superset-frontend/src/SqlLab/components/EditorWrapper/useKeywords.ts
index 19801df7e38..52c0cd818b0 100644
--- a/superset-frontend/src/SqlLab/components/EditorWrapper/useKeywords.ts
+++ b/superset-frontend/src/SqlLab/components/EditorWrapper/useKeywords.ts
@@ -55,7 +55,7 @@ const { useQueryState: useTablesQueryState } =
tableEndpoints.tables;
const getHelperText = (value: string) =>
value.length > 30 && {
- docText: value,
+ detail: value,
};
const extensionsRegistry = getExtensionsRegistry();
diff --git a/superset-frontend/src/core/editors/AceEditorProvider.tsx
b/superset-frontend/src/core/editors/AceEditorProvider.tsx
index c52d0f93332..89c8a579117 100644
--- a/superset-frontend/src/core/editors/AceEditorProvider.tsx
+++ b/superset-frontend/src/core/editors/AceEditorProvider.tsx
@@ -189,6 +189,8 @@ const toAceKeyword = (keyword: EditorKeyword):
AceCompleterKeyword => ({
value: keyword.value ?? keyword.name,
score: keyword.score ?? 0,
meta: keyword.meta ?? '',
+ docText: keyword.detail,
+ docHTML: keyword.documentation,
});
/**
diff --git
a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/ColumnSelectPopover.test.tsx
b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/ColumnSelectPopover.test.tsx
index 6129ef0f2f5..4c3d0fa13aa 100644
---
a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/ColumnSelectPopover.test.tsx
+++
b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/ColumnSelectPopover.test.tsx
@@ -184,13 +184,13 @@ test('passes keywords as objects to
SQLEditorWithValidation for autocomplete', (
expect(keyword).toHaveProperty('meta');
});
- // Verify column keywords specifically have docHTML for rich tooltips
+ // Verify column keywords specifically have documentation for rich tooltips
const columnKeywords = keywords.filter(
(k: Record<string, unknown>) => k.meta === 'column',
);
expect(columnKeywords.length).toBe(2); // We passed 2 columns
columnKeywords.forEach((keyword: Record<string, unknown>) => {
- expect(keyword).toHaveProperty('docHTML');
+ expect(keyword).toHaveProperty('documentation');
});
});
diff --git
a/superset-frontend/src/explore/controlUtils/getColumnKeywords.test.tsx
b/superset-frontend/src/explore/controlUtils/getColumnKeywords.test.tsx
index 59782ba94df..003f01e367b 100644
--- a/superset-frontend/src/explore/controlUtils/getColumnKeywords.test.tsx
+++ b/superset-frontend/src/explore/controlUtils/getColumnKeywords.test.tsx
@@ -31,7 +31,7 @@ test('returns HTML for a column tooltip', () => {
expect(getColumnKeywords([expected])).toContainEqual({
name: expected.column_name,
value: expected.column_name,
- docHTML: expect.stringContaining(expected.description),
+ documentation: expect.stringContaining(expected.description),
score: 50,
meta: 'column',
});
diff --git a/superset-frontend/src/explore/controlUtils/getColumnKeywords.tsx
b/superset-frontend/src/explore/controlUtils/getColumnKeywords.tsx
index a6ace5ae01a..584d91f02ff 100644
--- a/superset-frontend/src/explore/controlUtils/getColumnKeywords.tsx
+++ b/superset-frontend/src/explore/controlUtils/getColumnKeywords.tsx
@@ -34,7 +34,7 @@ export function getColumnKeywords(columns: ColumnMeta[]) {
}) => ({
name: verbose_name || column_name,
value: column_name,
- docHTML: getTooltipHTML({
+ documentation: getTooltipHTML({
title: column_name,
body: `type: ${type || 'unknown'}<br />${description ? `description:
${description}` : ''}`,
footer: is_certified ? t('Certified by %s', certified_by) : undefined,