Skip to content

Commit 0d29277

Browse files
Added plain text language
1 parent 0d7905b commit 0d29277

File tree

4 files changed

+64
-31
lines changed

4 files changed

+64
-31
lines changed

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

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,56 @@
11
import {
22
ScopeSupportFacetLevel,
33
languageScopeSupport,
4+
scopeSupportFacetInfos,
45
scopeSupportFacets,
6+
textualScopeSupportFacetInfos,
7+
type ScopeSupportFacet,
8+
type TextualScopeSupportFacet,
59
} from "@cursorless/common";
610
import * as React from "react";
7-
import { ScopeSupportForLevel } from "./ScopeSupportForLevel";
11+
import {
12+
ScopeSupportForLevel,
13+
type FacetWrapper,
14+
} from "./ScopeSupportForLevel";
815

916
interface Props {
1017
languageId: string;
1118
}
1219

13-
export function ScopeSupport({ languageId }: Props): React.JSX.Element {
14-
const facetsSorted = [...scopeSupportFacets].sort();
15-
const scopeSupport = languageScopeSupport[languageId] ?? {};
20+
function getSupport(languageId: string): FacetWrapper[] {
21+
if (languageId === "plaintext") {
22+
return Object.keys(textualScopeSupportFacetInfos)
23+
.sort()
24+
.map((f) => {
25+
const facet = f as TextualScopeSupportFacet;
26+
return {
27+
facet,
28+
supportLevel: ScopeSupportFacetLevel.supported,
29+
info: textualScopeSupportFacetInfos[facet],
30+
};
31+
});
32+
}
33+
const supportLevels = languageScopeSupport[languageId] ?? {};
34+
return [...scopeSupportFacets].sort().map((f) => {
35+
const facet = f as ScopeSupportFacet;
36+
return {
37+
facet,
38+
supportLevel: supportLevels[facet],
39+
info: scopeSupportFacetInfos[facet],
40+
};
41+
});
42+
}
1643

17-
const supportedFacets = facetsSorted.filter(
18-
(facet) => scopeSupport[facet] === ScopeSupportFacetLevel.supported,
44+
export function ScopeSupport({ languageId }: Props): React.JSX.Element {
45+
const facets = getSupport(languageId);
46+
const supportedFacets = facets.filter(
47+
(facet) => facet.supportLevel === ScopeSupportFacetLevel.supported,
1948
);
20-
const unsupportedFacets = facetsSorted.filter(
21-
(facet) => scopeSupport[facet] === ScopeSupportFacetLevel.unsupported,
49+
const unsupportedFacets = facets.filter(
50+
(facet) => facet.supportLevel === ScopeSupportFacetLevel.unsupported,
2251
);
23-
const unspecifiedFacets = facetsSorted.filter(
24-
(facet) => scopeSupport[facet] == null,
52+
const unspecifiedFacets = facets.filter(
53+
(facet) => facet.supportLevel == null,
2554
);
2655

2756
return (

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

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
import {
22
groupBy,
3-
scopeSupportFacetInfos,
43
serializeScopeType,
54
type ScopeSupportFacet,
65
type ScopeSupportFacetInfo,
6+
type ScopeSupportFacetLevel,
7+
type TextualScopeSupportFacet,
78
} from "@cursorless/common";
89
import React, { useState, type JSX } from "react";
910
import { prettifyFacet, prettifyScopeType } from "./util";
1011

12+
export interface FacetWrapper {
13+
facet: ScopeSupportFacet | TextualScopeSupportFacet;
14+
supportLevel: ScopeSupportFacetLevel | undefined;
15+
info: ScopeSupportFacetInfo;
16+
}
17+
1118
interface Props {
12-
facets: ScopeSupportFacet[];
19+
facets: FacetWrapper[];
1320
title: string;
1421
subtitle: string;
1522
description?: React.ReactNode;
@@ -25,15 +32,8 @@ export function ScopeSupportForLevel({
2532
}: Props): JSX.Element | null {
2633
const [open, setOpen] = useState(openProp ?? false);
2734

28-
const facetInfos = facets.map(
29-
(facet): AugmentedFacetInfo => ({
30-
facet,
31-
...scopeSupportFacetInfos[facet],
32-
}),
33-
);
34-
const scopeGroups: Map<string, AugmentedFacetInfo[]> = groupBy(
35-
facetInfos,
36-
(facetInfo) => serializeScopeType(facetInfo.scopeType),
35+
const scopeGroups: Map<string, FacetWrapper[]> = groupBy(facets, (f) =>
36+
serializeScopeType(f.info.scopeType),
3737
);
3838
const scopeTypes = Array.from(scopeGroups.keys())
3939
.filter((scope) => !scope.startsWith("private."))
@@ -57,18 +57,18 @@ export function ScopeSupportForLevel({
5757
{description && <p>{description}</p>}
5858

5959
{scopeTypes.map((scopeType) => {
60-
const facetInfos = scopeGroups.get(scopeType) ?? [];
60+
const facets = scopeGroups.get(scopeType) ?? [];
6161
return (
6262
<div key={scopeType}>
6363
<h4>{prettifyScopeType(scopeType)}</h4>
6464
<ul>
65-
{facetInfos.map((facetInfo) => {
65+
{facets.map((facet) => {
6666
return (
67-
<li key={facetInfo.facet}>
68-
<span className="facet-name" title={facetInfo.facet}>
69-
{prettifyFacet(facetInfo.facet, false)}
67+
<li key={facet.facet}>
68+
<span className="facet-name" title={facet.facet}>
69+
{prettifyFacet(facet.facet, false)}
7070
</span>
71-
: {facetInfo.description}
71+
: {facet.info.description}
7272
</li>
7373
);
7474
})}
@@ -91,7 +91,3 @@ export function ScopeSupportForLevel({
9191
</div>
9292
);
9393
}
94-
95-
interface AugmentedFacetInfo extends ScopeSupportFacetInfo {
96-
facet: ScopeSupportFacet;
97-
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,9 @@ function getOverlap(a: Range, b: Range): Range | null {
199199
}
200200

201201
function getScopeFixtures(languageId: string): Scope[] {
202+
if (languageId === "plaintext") {
203+
languageId = "textual";
204+
}
202205
const languageIds = new Set<string>(
203206
scopeTests.imports[languageId] ?? [languageId],
204207
);
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { Language } from "./components/Language";
2+
3+
# Plaintext
4+
5+
<Language languageId="plaintext" />

0 commit comments

Comments
 (0)