Skip to content

Commit 8847462

Browse files
committed
combine state var
1 parent 5c1fb12 commit 8847462

File tree

7 files changed

+52
-33
lines changed

7 files changed

+52
-33
lines changed

src/App.tsx

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,21 @@ import { decodeFromBase64 } from './lib/utils';
1010

1111
function App() {
1212

13-
const { setTool, language, tool, jsCode, setJsCode, jsonCode, setJsonCode, setLanguage, setParser,
13+
const { setTool, language, tool, setLanguage, setParser,
1414
setSourceType, setEsVersion, setIsJSX, setJsonMode, setWrap, setAstViewMode, setScopeViewMode,
15-
setPathViewMode, setPathIndexes, setPathIndex } = useExplorer();
15+
setPathViewMode, setPathIndexes, setPathIndex, code, setCode } = useExplorer();
1616
const activeTool = tools.find(({ value }) => value === tool) ?? tools[0];
1717

1818
useLayoutEffect(() => {
1919
const getUrlState = () => {
2020
try {
2121
const urlState = JSON.parse(decodeFromBase64(window.location.hash.replace(/^#/u, "")));
2222
if (urlState?.state) {
23-
const { tool, jsCode, jsonCode, language, parser, sourceType, esVersion, isJSX,
23+
const { code, tool, language, parser, sourceType, esVersion, isJSX,
2424
jsonMode, wrap, astViewMode, scopeViewMode, pathViewMode, pathIndexes, pathIndex } = urlState.state;
2525

26+
setCode(code);
2627
setTool(tool);
27-
setJsCode(jsCode);
28-
setJsonCode(jsonCode);
2928
setLanguage(language);
3029
setParser(parser);
3130
setSourceType(sourceType);
@@ -44,7 +43,7 @@ function App() {
4443
}
4544
};
4645
getUrlState();
47-
}, [])
46+
}, []);
4847

4948
return (
5049
<ThemeProvider defaultTheme="dark" storageKey="vite-ui-theme">
@@ -56,9 +55,9 @@ function App() {
5655
<Editor
5756
className="h-[30dvh] sm:h-full"
5857
language={language}
59-
value={language === 'javascript' ? jsCode : jsonCode}
58+
value={language === 'javascript' ? code.jsCode : code.jsonCode}
6059
onChange={(value) => {
61-
language === 'javascript' ? setJsCode(value ?? '') : setJsonCode(value ?? '')
60+
language === 'javascript' ? setCode({ ...code, jsCode: value || '' }) : setCode({ ...code, jsonCode: value || '' })
6261
}}
6362
/>
6463
<div className="bg-foreground/5 pb-8 overflow-auto h-[70dvh] sm:h-full relative flex flex-col">

src/components/ast/javascript-ast.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export const JavascriptAst: FC = () => {
1212
let tree: ReturnType<typeof espree.parse> | null = null;
1313

1414
try {
15-
tree = espree.parse(explorer.jsCode, {
15+
tree = espree.parse(explorer.code.jsCode, {
1616
ecmaVersion: explorer.esVersion,
1717
sourceType: explorer.sourceType,
1818
});

src/components/ast/json-ast.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export const JsonAst: FC = () => {
1212
let tree: ReturnType<typeof parse> | null = null;
1313

1414
try {
15-
tree = parse(explorer.jsonCode, {
15+
tree = parse(explorer.code.jsonCode, {
1616
mode: explorer.jsonMode,
1717
ranges: true,
1818
tokens: true,

src/components/path/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export const CodePath: FC = () => {
2222

2323
useDebouncedEffect(
2424
() => {
25-
generateCodePath(explorer.jsCode, explorer.esVersion, explorer.sourceType)
25+
generateCodePath(explorer.code.jsCode, explorer.esVersion, explorer.sourceType)
2626
.then((response) => {
2727
if ('error' in response) {
2828
throw new Error(response.error);
@@ -45,7 +45,7 @@ export const CodePath: FC = () => {
4545
.catch((newError) => setError(parseError(newError)));
4646
},
4747
500,
48-
[explorer, explorer.jsCode, explorer.esVersion, explorer.sourceType, explorer.setPathIndexes, explorer.pathIndexes]
48+
[explorer, explorer.code.jsCode, explorer.esVersion, explorer.sourceType, explorer.setPathIndexes, explorer.pathIndexes]
4949
);
5050

5151
if (error) {

src/components/scope/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export const Scope: FC = () => {
1313
let ast = {};
1414

1515
try {
16-
ast = espree.parse(explorer.jsCode, {
16+
ast = espree.parse(explorer.code.jsCode, {
1717
range: true,
1818
ecmaVersion: explorer.esVersion,
1919
sourceType: explorer.sourceType,

src/hooks/use-explorer.ts

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,24 @@ import { create } from 'zustand';
22
import { devtools, persist } from 'zustand/middleware';
33
import type { Options } from 'espree';
44
import { storeState } from '../lib/utils';
5-
import {defaultJsCode, defaultJsonCode} from '../lib/const'
5+
import {defaultCode, defaultJsOptions} from '../lib/const'
66
export type SourceType = Exclude<Options['sourceType'], undefined>;
77
export type Version = Exclude<Options['ecmaVersion'], undefined>;
88

9+
type Code = { jsCode: string, jsonCode: string };
10+
type JsOptions = { parser: string, sourceType: string, esVersion: string, isJSX: Boolean}
911
type ExplorerState = {
10-
tool: 'ast' | 'scope' | 'path';
11-
setTool: (tool: ExplorerState['tool']) => void;
12-
13-
jsCode: string;
14-
setJsCode: (jsCode: string) => void;
15-
16-
jsonCode: string;
17-
setJsonCode: (jsonCode: string) => void;
12+
code: Code;
13+
setCode: (code: Code) => void;
1814

1915
language: string;
2016
setLanguage: (language: string) => void;
2117

18+
tool: 'ast' | 'scope' | 'path';
19+
setTool: (tool: ExplorerState['tool']) => void;
20+
21+
jsOptions: JsOptions;
22+
2223
parser: string;
2324
setParser: (parser: string) => void;
2425

@@ -66,18 +67,18 @@ export const useExplorer = create<ExplorerState>()(
6667
devtools(
6768
persist(
6869
(set) => ({
69-
tool: 'ast',
70-
setTool: createSetter('tool', set),
71-
72-
jsCode: defaultJsCode,
73-
setJsCode: createSetter('jsCode', set),
74-
75-
jsonCode: defaultJsonCode,
76-
setJsonCode: createSetter('jsonCode', set),
70+
code: defaultCode,
71+
setCode: createSetter('code', set),
7772

7873
language: 'javascript',
7974
setLanguage: createSetter('language', set),
8075

76+
tool: 'ast',
77+
setTool: createSetter('tool', set),
78+
79+
jsOptions: defaultJsOptions,
80+
setJsOptions: createSetter('jsOptions', set),
81+
8182
parser: 'espree',
8283
setParser: createSetter('parser', set),
8384

src/lib/const.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ export const pathViewOptions = [
194194
},
195195
];
196196

197-
export const defaultJsCode = `
197+
const defaultJsCode = `
198198
/**
199199
* Type or paste some JavaScript here to learn more about
200200
* the static analysis that ESLint can do for you.
@@ -230,7 +230,7 @@ export default [
230230
getConfig()
231231
];`.trim();
232232

233-
export const defaultJsonCode = `
233+
const defaultJsonCode = `
234234
/**
235235
* Type or paste some JSON here to learn more about
236236
* the static analysis that ESLint can do for you.
@@ -253,4 +253,23 @@ export const defaultJsonCode = `
253253
"key2": {
254254
"key3": [1, 2, "3", 1e10, 1e-3]
255255
}
256-
}`.trim();
256+
}`.trim();
257+
258+
export const defaultCode = { jsCode: defaultJsCode, jsonCode: defaultJsonCode };
259+
260+
export const defaultJsOptions = {
261+
parser: 'espree',
262+
sourceType: 'module',
263+
esVersion: 'latest',
264+
isJSX: true,
265+
}
266+
267+
export const defaultJsonOptions = {
268+
jsonMode: 'jsonc',
269+
wrap: true,
270+
astViewMode: 'json',
271+
scopeViewMode: 'flat',
272+
pathViewMode: 'code',
273+
pathIndexes: 1,
274+
pathIndex: 0,
275+
}

0 commit comments

Comments
 (0)