diff --git a/packages/cursorless-org-docs/src/docs/contributing/MissingLanguageScopes.tsx b/packages/cursorless-org-docs/src/docs/contributing/MissingLanguageScopes.tsx
new file mode 100644
index 0000000000..1afbd9467f
--- /dev/null
+++ b/packages/cursorless-org-docs/src/docs/contributing/MissingLanguageScopes.tsx
@@ -0,0 +1,80 @@
+import {
+ languageScopeSupport,
+ scopeSupportFacetInfos,
+ ScopeSupportFacetLevel,
+ scopeSupportFacets,
+ type ScopeSupportFacet,
+ type ScopeType,
+ type SimpleScopeTypeType,
+} from "@cursorless/common";
+import React from "react";
+
+export function MissingLanguageScopes(): React.JSX.Element[] {
+ return Object.keys(languageScopeSupport)
+ .sort()
+ .map((languageId) => );
+}
+
+function Language({
+ languageId,
+}: {
+ languageId: string;
+}): 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,
+ );
+
+ if (unsupportedFacets.length === 0 && unspecifiedFacets.length === 0) {
+ return null;
+ }
+
+ return (
+ <>
+
{languageId}
+ {renderFacets("Unsupported", unsupportedFacets)}
+ {renderFacets("Unspecified", unspecifiedFacets)}
+ >
+ );
+}
+
+function renderFacets(
+ title: string,
+ facets: ScopeSupportFacet[],
+): React.JSX.Element | null {
+ const scopes = Array.from(
+ new Set(
+ facets.map((f) =>
+ serializeScopeType(scopeSupportFacetInfos[f].scopeType),
+ ),
+ ),
+ ).sort();
+
+ if (scopes.length === 0) {
+ return null;
+ }
+
+ return (
+ <>
+ {title} ({scopes.length})
+
+ {scopes.map((scope) => {
+ return - {scope}
;
+ })}
+
+ >
+ );
+}
+
+function serializeScopeType(
+ scopeType: SimpleScopeTypeType | ScopeType,
+): string {
+ if (typeof scopeType === "string") {
+ return scopeType;
+ }
+ return scopeType.type;
+}
diff --git a/packages/cursorless-org-docs/src/docs/contributing/adding-a-new-language.md b/packages/cursorless-org-docs/src/docs/contributing/adding-a-new-language.md
index c1a18a917f..e204c754a7 100644
--- a/packages/cursorless-org-docs/src/docs/contributing/adding-a-new-language.md
+++ b/packages/cursorless-org-docs/src/docs/contributing/adding-a-new-language.md
@@ -48,5 +48,5 @@ import { Language } from "./components/Language";
# Java
-
+
```
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
new file mode 100644
index 0000000000..37f72a1de5
--- /dev/null
+++ b/packages/cursorless-org-docs/src/docs/contributing/missing_language_scopes.mdx
@@ -0,0 +1,9 @@
+import { MissingLanguageScopes } from "./MissingLanguageScopes";
+
+# Missing language scopes
+
+The following languages have one or more missing (unsupported or not specified) scope facets and need a developer to have a look at them.
+
+[Adding a new scope](./adding-a-new-scope.md)
+
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/c.mdx b/packages/cursorless-org-docs/src/docs/user/languages/c.mdx
index ce075f921b..971c64b843 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/c.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/c.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# C
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/clojure.mdx b/packages/cursorless-org-docs/src/docs/user/languages/clojure.mdx
index 55c123d0c4..fbb26d7c1d 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/clojure.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/clojure.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Clojure
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/components/ScopeSupport.tsx b/packages/cursorless-org-docs/src/docs/user/languages/components/ScopeSupport.tsx
index c09a9e0887..bafebf11f1 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/components/ScopeSupport.tsx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/components/ScopeSupport.tsx
@@ -11,19 +11,19 @@ interface Props {
}
export function ScopeSupport({ languageId }: Props): React.JSX.Element {
- const scopesSorted = [...scopeSupportFacets].sort();
+ const facetsSorted = [...scopeSupportFacets].sort();
const scopeSupport = languageScopeSupport[languageId] ?? {};
- const supportedScopes = scopesSorted.filter(
+ const supportedFacets = facetsSorted.filter(
(facet) => scopeSupport[facet] === ScopeSupportFacetLevel.supported,
);
- const supportedLegacyScopes = scopesSorted.filter(
+ const supportedLegacyFacets = facetsSorted.filter(
(facet) => scopeSupport[facet] === ScopeSupportFacetLevel.supportedLegacy,
);
- const unsupportedScopes = scopesSorted.filter(
+ const unsupportedFacets = facetsSorted.filter(
(facet) => scopeSupport[facet] === ScopeSupportFacetLevel.unsupported,
);
- const unspecifiedScopes = scopesSorted.filter(
+ const unspecifiedFacets = facetsSorted.filter(
(facet) => scopeSupport[facet] == null,
);
@@ -32,20 +32,20 @@ export function ScopeSupport({ languageId }: Props): React.JSX.Element {
Scopes
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/csharp.mdx b/packages/cursorless-org-docs/src/docs/user/languages/csharp.mdx
index 5f1f9f2ad8..650f388e75 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/csharp.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/csharp.mdx
@@ -6,4 +6,4 @@ import { Language } from "./components/Language";
# C#
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/css.mdx b/packages/cursorless-org-docs/src/docs/user/languages/css.mdx
index cb6de3f8a9..75f2025d6f 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/css.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/css.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# CSS
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/dart.mdx b/packages/cursorless-org-docs/src/docs/user/languages/dart.mdx
index 7b18b06670..f39dd7259e 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/dart.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/dart.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Dart
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/go.mdx b/packages/cursorless-org-docs/src/docs/user/languages/go.mdx
index 3c0b9c041e..d5129adc72 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/go.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/go.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Go
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/html.mdx b/packages/cursorless-org-docs/src/docs/user/languages/html.mdx
index 34304c31e1..b34fb62d4c 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/html.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/html.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# HTML
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/java.mdx b/packages/cursorless-org-docs/src/docs/user/languages/java.mdx
index 77d64f7276..ac34160487 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/java.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/java.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Java
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/javascript.mdx b/packages/cursorless-org-docs/src/docs/user/languages/javascript.mdx
index 4a86aa892d..225d0c3f38 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/javascript.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/javascript.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Javascript
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/javascriptreact.mdx b/packages/cursorless-org-docs/src/docs/user/languages/javascriptreact.mdx
index 72272270cc..d347f1a350 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/javascriptreact.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/javascriptreact.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Javascript react
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/json.mdx b/packages/cursorless-org-docs/src/docs/user/languages/json.mdx
index 076ad1aebb..7a15abe8b6 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/json.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/json.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# JSON
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/jsonc.mdx b/packages/cursorless-org-docs/src/docs/user/languages/jsonc.mdx
index 87cff84c02..70de3cb1d2 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/jsonc.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/jsonc.mdx
@@ -6,4 +6,4 @@ import { Language } from "./components/Language";
# JSON with comments (JSONC)
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/jsonl.mdx b/packages/cursorless-org-docs/src/docs/user/languages/jsonl.mdx
index 04e94e284d..e508178163 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/jsonl.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/jsonl.mdx
@@ -6,4 +6,4 @@ import { Language } from "./components/Language";
# JSON lines (JSONL)
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/latex.mdx b/packages/cursorless-org-docs/src/docs/user/languages/latex.mdx
index 2122e8b23b..c0e80dd492 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/latex.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/latex.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Latex
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/lua.mdx b/packages/cursorless-org-docs/src/docs/user/languages/lua.mdx
index f76d593649..c6bcf6a234 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/lua.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/lua.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Lua
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/markdown.mdx b/packages/cursorless-org-docs/src/docs/user/languages/markdown.mdx
index e6a256e223..6336721323 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/markdown.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/markdown.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Markdown
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/php.mdx b/packages/cursorless-org-docs/src/docs/user/languages/php.mdx
index 9551cb922e..82dd70efd1 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/php.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/php.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# PHP
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/python.mdx b/packages/cursorless-org-docs/src/docs/user/languages/python.mdx
index 250536d69d..3b62a38834 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/python.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/python.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Python
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/r.mdx b/packages/cursorless-org-docs/src/docs/user/languages/r.mdx
index cc692d622a..816cd4b9e0 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/r.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/r.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# R
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/ruby.mdx b/packages/cursorless-org-docs/src/docs/user/languages/ruby.mdx
index 9f9215458b..1ff711b831 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/ruby.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/ruby.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Ruby
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/rust.mdx b/packages/cursorless-org-docs/src/docs/user/languages/rust.mdx
index d0b1f73959..1aa6990171 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/rust.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/rust.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Rust
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/scala.mdx b/packages/cursorless-org-docs/src/docs/user/languages/scala.mdx
index ffba794182..09a4ead8f8 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/scala.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/scala.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Scala
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/scm.mdx b/packages/cursorless-org-docs/src/docs/user/languages/scm.mdx
index af11ee541b..bc89b63ffa 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/scm.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/scm.mdx
@@ -6,4 +6,4 @@ import { Language } from "./components/Language";
# Tree sitter query language (scm)
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/scss.mdx b/packages/cursorless-org-docs/src/docs/user/languages/scss.mdx
index e86ec7e2a3..e2fc684299 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/scss.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/scss.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# SCSS
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/talon.mdx b/packages/cursorless-org-docs/src/docs/user/languages/talon.mdx
index 47c6cc1c98..69209c6ab7 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/talon.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/talon.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Talon
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/typescript.mdx b/packages/cursorless-org-docs/src/docs/user/languages/typescript.mdx
index c8588b5f63..1f40bf6516 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/typescript.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/typescript.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Typescript
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/typescriptreact.mdx b/packages/cursorless-org-docs/src/docs/user/languages/typescriptreact.mdx
index fe16d1c820..72eb31379b 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/typescriptreact.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/typescriptreact.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Typescript react
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/xml.mdx b/packages/cursorless-org-docs/src/docs/user/languages/xml.mdx
index b61d67a423..405b5f6fec 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/xml.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/xml.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# XML
-
+
diff --git a/packages/cursorless-org-docs/src/docs/user/languages/yaml.mdx b/packages/cursorless-org-docs/src/docs/user/languages/yaml.mdx
index 9ba23a4a87..b6eb6db912 100644
--- a/packages/cursorless-org-docs/src/docs/user/languages/yaml.mdx
+++ b/packages/cursorless-org-docs/src/docs/user/languages/yaml.mdx
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
# Yaml
-
+