diff --git a/packages/cursorless-org-docs/src/docs/contributing/MissingLanguageScopes.tsx b/packages/cursorless-org-docs/src/docs/contributing/MissingLanguageScopes.tsx
index b09f4d168b..cf6e328049 100644
--- a/packages/cursorless-org-docs/src/docs/contributing/MissingLanguageScopes.tsx
+++ b/packages/cursorless-org-docs/src/docs/contributing/MissingLanguageScopes.tsx
@@ -9,16 +9,34 @@ import {
} from "@cursorless/common";
import React, { useEffect, useState } from "react";
-export function MissingLanguageScopes(): React.JSX.Element[] {
- return Object.keys(languageScopeSupport)
- .sort()
- .map((languageId) => );
+export function MissingLanguageScopes(): React.JSX.Element {
+ const [showPrivate, setShowPrivate] = useState(false);
+ const languageIds = Object.keys(languageScopeSupport).sort();
+
+ return (
+ <>
+
+
+ {languageIds.map((languageId) => (
+
+ ))}
+ >
+ );
}
function Language({
languageId,
+ showPrivate,
}: {
languageId: string;
+ showPrivate: boolean;
}): React.JSX.Element | null {
const scopeSupport = languageScopeSupport[languageId] ?? {};
@@ -28,8 +46,10 @@ function Language({
const unspecifiedFacets = scopeSupportFacets.filter(
(facet) => scopeSupport[facet] == null,
);
+ const unsupportedScopes = facetsToScopes(unsupportedFacets, showPrivate);
+ const unspecifiedScopes = facetsToScopes(unspecifiedFacets, showPrivate);
- if (unsupportedFacets.length === 0 && unspecifiedFacets.length === 0) {
+ if (unsupportedScopes.length === 0 && unspecifiedScopes.length === 0) {
return null;
}
@@ -42,30 +62,22 @@ function Language({
link
- {renderFacets("Unsupported", unsupportedFacets)}
- {renderFacets("Unspecified", unspecifiedFacets)}
+
+ {renderFacets("Unsupported", unsupportedScopes)}
+ {renderFacets("Unspecified", unspecifiedScopes)}
>
);
}
function renderFacets(
title: string,
- facets: ScopeSupportFacet[],
+ scopes: string[],
): React.JSX.Element | null {
const [open, setOpen] = useState(false);
- const [scopes, setScopes] = useState([]);
useEffect(() => {
- const scopes = Array.from(
- new Set(
- facets.map((f) =>
- serializeScopeType(scopeSupportFacetInfos[f].scopeType),
- ),
- ),
- ).sort();
- setScopes(scopes);
setOpen(scopes.length < 4);
- }, []);
+ }, [scopes]);
if (scopes.length === 0) {
return null;
@@ -98,6 +110,18 @@ 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 serializeScopeType(
scopeType: SimpleScopeTypeType | ScopeType,
): string {