Skip to content

Commit 31cd14b

Browse files
Added contributer docs component to show missing language scopes (#2978)
Fixes #2973
1 parent 774c6c5 commit 31cd14b

34 files changed

+129
-40
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import {
2+
languageScopeSupport,
3+
scopeSupportFacetInfos,
4+
ScopeSupportFacetLevel,
5+
scopeSupportFacets,
6+
type ScopeSupportFacet,
7+
type ScopeType,
8+
type SimpleScopeTypeType,
9+
} from "@cursorless/common";
10+
import React from "react";
11+
12+
export function MissingLanguageScopes(): React.JSX.Element[] {
13+
return Object.keys(languageScopeSupport)
14+
.sort()
15+
.map((languageId) => <Language key={languageId} languageId={languageId} />);
16+
}
17+
18+
function Language({
19+
languageId,
20+
}: {
21+
languageId: string;
22+
}): React.JSX.Element | null {
23+
const scopeSupport = languageScopeSupport[languageId] ?? {};
24+
25+
const unsupportedFacets = scopeSupportFacets.filter(
26+
(facet) => scopeSupport[facet] === ScopeSupportFacetLevel.unsupported,
27+
);
28+
const unspecifiedFacets = scopeSupportFacets.filter(
29+
(facet) => scopeSupport[facet] == null,
30+
);
31+
32+
if (unsupportedFacets.length === 0 && unspecifiedFacets.length === 0) {
33+
return null;
34+
}
35+
36+
return (
37+
<>
38+
<h3>{languageId}</h3>
39+
{renderFacets("Unsupported", unsupportedFacets)}
40+
{renderFacets("Unspecified", unspecifiedFacets)}
41+
</>
42+
);
43+
}
44+
45+
function renderFacets(
46+
title: string,
47+
facets: ScopeSupportFacet[],
48+
): React.JSX.Element | null {
49+
const scopes = Array.from(
50+
new Set(
51+
facets.map((f) =>
52+
serializeScopeType(scopeSupportFacetInfos[f].scopeType),
53+
),
54+
),
55+
).sort();
56+
57+
if (scopes.length === 0) {
58+
return null;
59+
}
60+
61+
return (
62+
<>
63+
{title} ({scopes.length})
64+
<ul>
65+
{scopes.map((scope) => {
66+
return <li key={scope}>{scope}</li>;
67+
})}
68+
</ul>
69+
</>
70+
);
71+
}
72+
73+
function serializeScopeType(
74+
scopeType: SimpleScopeTypeType | ScopeType,
75+
): string {
76+
if (typeof scopeType === "string") {
77+
return scopeType;
78+
}
79+
return scopeType.type;
80+
}

packages/cursorless-org-docs/src/docs/contributing/adding-a-new-language.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,5 @@ import { Language } from "./components/Language";
4848

4949
# Java
5050

51-
<Language languageId="java"></Language>
51+
<Language languageId="java" />
5252
```
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { MissingLanguageScopes } from "./MissingLanguageScopes";
2+
3+
# Missing language scopes
4+
5+
The following languages have one or more missing (unsupported or not specified) scope facets and need a developer to have a look at them.
6+
7+
[Adding a new scope](./adding-a-new-scope.md)
8+
9+
<MissingLanguageScopes />

packages/cursorless-org-docs/src/docs/user/languages/c.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
22

33
# C
44

5-
<Language languageId="c"></Language>
5+
<Language languageId="c" />

packages/cursorless-org-docs/src/docs/user/languages/clojure.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
22

33
# Clojure
44

5-
<Language languageId="clojure"></Language>
5+
<Language languageId="clojure" />

packages/cursorless-org-docs/src/docs/user/languages/components/ScopeSupport.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,19 @@ interface Props {
1111
}
1212

1313
export function ScopeSupport({ languageId }: Props): React.JSX.Element {
14-
const scopesSorted = [...scopeSupportFacets].sort();
14+
const facetsSorted = [...scopeSupportFacets].sort();
1515
const scopeSupport = languageScopeSupport[languageId] ?? {};
1616

17-
const supportedScopes = scopesSorted.filter(
17+
const supportedFacets = facetsSorted.filter(
1818
(facet) => scopeSupport[facet] === ScopeSupportFacetLevel.supported,
1919
);
20-
const supportedLegacyScopes = scopesSorted.filter(
20+
const supportedLegacyFacets = facetsSorted.filter(
2121
(facet) => scopeSupport[facet] === ScopeSupportFacetLevel.supportedLegacy,
2222
);
23-
const unsupportedScopes = scopesSorted.filter(
23+
const unsupportedFacets = facetsSorted.filter(
2424
(facet) => scopeSupport[facet] === ScopeSupportFacetLevel.unsupported,
2525
);
26-
const unspecifiedScopes = scopesSorted.filter(
26+
const unspecifiedFacets = facetsSorted.filter(
2727
(facet) => scopeSupport[facet] == null,
2828
);
2929

@@ -32,20 +32,20 @@ export function ScopeSupport({ languageId }: Props): React.JSX.Element {
3232
<h2>Scopes</h2>
3333

3434
<ScopeSupportForLevel
35-
facets={supportedScopes}
35+
facets={supportedFacets}
3636
title="Supported facets"
3737
subtitle="These facets are supported"
3838
open
3939
/>
4040

4141
<ScopeSupportForLevel
42-
facets={supportedLegacyScopes}
42+
facets={supportedLegacyFacets}
4343
title="Supported Legacy facets"
4444
subtitle="These facets are supported with the legacy implementation and should be migrated to the new implementation"
4545
/>
4646

4747
<ScopeSupportForLevel
48-
facets={unsupportedScopes}
48+
facets={unsupportedFacets}
4949
title="Unsupported facets"
5050
subtitle="These facets are not supported yet and needs a developer to implement them"
5151
description={
@@ -59,7 +59,7 @@ export function ScopeSupport({ languageId }: Props): React.JSX.Element {
5959
/>
6060

6161
<ScopeSupportForLevel
62-
facets={unspecifiedScopes}
62+
facets={unspecifiedFacets}
6363
title="Unspecified facets"
6464
subtitle="These facets are unspecified"
6565
description={

packages/cursorless-org-docs/src/docs/user/languages/cpp.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
22

33
# C++
44

5-
<Language languageId="cpp"></Language>
5+
<Language languageId="cpp" />

packages/cursorless-org-docs/src/docs/user/languages/csharp.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ import { Language } from "./components/Language";
66

77
# C#
88

9-
<Language languageId="csharp"></Language>
9+
<Language languageId="csharp" />

packages/cursorless-org-docs/src/docs/user/languages/css.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
22

33
# CSS
44

5-
<Language languageId="css"></Language>
5+
<Language languageId="css" />

packages/cursorless-org-docs/src/docs/user/languages/dart.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ import { Language } from "./components/Language";
22

33
# Dart
44

5-
<Language languageId="dart"></Language>
5+
<Language languageId="dart" />

0 commit comments

Comments
 (0)