From 90f46f2f584183f47bb35324b9bb87598aa7eed2 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Mon, 7 Jul 2025 11:13:00 +0200 Subject: [PATCH] Show facets instead of just scopes in missing scopes docs page --- .../contributing/MissingLanguageScopes.tsx | 49 +++++++++---------- ...scopes.mdx => missing-language-scopes.mdx} | 0 2 files changed, 23 insertions(+), 26 deletions(-) rename packages/cursorless-org-docs/src/docs/contributing/{missing_language_scopes.mdx => missing-language-scopes.mdx} (100%) diff --git a/packages/cursorless-org-docs/src/docs/contributing/MissingLanguageScopes.tsx b/packages/cursorless-org-docs/src/docs/contributing/MissingLanguageScopes.tsx index e74ab7e762..11c722bbc2 100644 --- a/packages/cursorless-org-docs/src/docs/contributing/MissingLanguageScopes.tsx +++ b/packages/cursorless-org-docs/src/docs/contributing/MissingLanguageScopes.tsx @@ -43,17 +43,21 @@ function Language({ }): React.JSX.Element | null { const scopeSupport = languageScopeSupport[languageId] ?? {}; - const unsupportedFacets = scopeSupportFacets.filter( - (facet) => scopeSupport[facet] === ScopeSupportFacetLevel.unsupported, - ); - const unspecifiedFacets = scopeSupportFacets.filter( - (facet) => scopeSupport[facet] == null, - ); + let unsupportedFacets = scopeSupportFacets + .filter( + (facet) => scopeSupport[facet] === ScopeSupportFacetLevel.unsupported, + ) + .sort(); + let unspecifiedFacets = scopeSupportFacets + .filter((facet) => scopeSupport[facet] == null) + .sort(); - const unsupportedScopes = facetsToScopes(unsupportedFacets, showPrivate); - const unspecifiedScopes = facetsToScopes(unspecifiedFacets, showPrivate); + if (!showPrivate) { + unsupportedFacets = unsupportedFacets.filter((f) => !isPrivate(f)); + unspecifiedFacets = unspecifiedFacets.filter((f) => !isPrivate(f)); + } - if (unsupportedScopes.length === 0 && unspecifiedScopes.length === 0) { + if (unsupportedFacets.length === 0 && unspecifiedFacets.length === 0) { return null; } @@ -67,19 +71,19 @@ function Language({ - {renderFacets("Unsupported", unsupportedScopes)} - {renderFacets("Unspecified", unspecifiedScopes)} + {renderFacets("Unsupported", unsupportedFacets)} + {renderFacets("Unspecified", unspecifiedFacets)} ); } function renderFacets( title: string, - scopes: string[], + facets: string[], ): React.JSX.Element | null { - const [open, setOpen] = useState(scopes.length < 4); + const [open, setOpen] = useState(facets.length < 10); - if (scopes.length === 0) { + if (facets.length === 0) { return null; } @@ -91,7 +95,7 @@ function renderFacets( return (
@@ -102,7 +106,7 @@ function renderFacets( return (
setOpen(!open)}> - {title} ({scopes.length}) + {title} ({facets.length})
{renderBody()} @@ -110,14 +114,7 @@ function renderFacets( ); } -function facetsToScopes(facets: ScopeSupportFacet[], showPrivate: boolean) { - return Array.from( - new Set( - facets.map((f) => - serializeScopeType(scopeSupportFacetInfos[f].scopeType), - ), - ), - ) - .filter((scope) => showPrivate || !scope.startsWith("private.")) - .sort(); +function isPrivate(facet: ScopeSupportFacet): boolean { + const scopeType = serializeScopeType(scopeSupportFacetInfos[facet].scopeType); + return scopeType.startsWith("private."); } diff --git a/packages/cursorless-org-docs/src/docs/contributing/missing_language_scopes.mdx b/packages/cursorless-org-docs/src/docs/contributing/missing-language-scopes.mdx similarity index 100% rename from packages/cursorless-org-docs/src/docs/contributing/missing_language_scopes.mdx rename to packages/cursorless-org-docs/src/docs/contributing/missing-language-scopes.mdx