-
Notifications
You must be signed in to change notification settings - Fork 222
/
Copy pathToolsMenu.tsx
85 lines (77 loc) · 2.98 KB
/
ToolsMenu.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import React, { useCallback } from 'react';
import { useSelector } from 'react-redux';
import ButtonMenuItem from './ButtonMenuItem';
import MenuGroup from './MenuGroup';
import MenuAside from './MenuAside';
import * as selectors from './selectors';
import * as actions from './actions';
import { useAppDispatch } from './configureStore';
import styles from './ToolsMenu.module.css';
interface ToolsMenuProps {
close: () => void;
}
const ToolsMenu: React.FC<ToolsMenuProps> = props => {
const rustfmtVersion = useSelector(selectors.rustfmtVersionText);
const rustfmtVersionDetails = useSelector(selectors.rustfmtVersionDetailsText);
const clippyVersionDetails = useSelector(selectors.clippyVersionDetailsText);
const clippyVersion = useSelector(selectors.clippyVersionText);
const miriVersionDetails = useSelector(selectors.miriVersionDetailsText);
const miriVersion = useSelector(selectors.miriVersionText);
const nightlyVersion = useSelector(selectors.nightlyVersionText);
const nightlyVersionDetails = useSelector(selectors.nightlyVersionDetailsText);
const dispatch = useAppDispatch();
const clippy = useCallback(() => {
dispatch(actions.performClippy());
props.close();
}, [dispatch, props]);
const miri = useCallback(() => {
dispatch(actions.performMiri());
props.close();
}, [dispatch, props]);
const format = useCallback(() => {
dispatch(actions.performFormat());
props.close();
}, [dispatch, props]);
const expandMacros = useCallback(() => {
dispatch(actions.performMacroExpansion());
props.close();
}, [dispatch, props]);
return (
<MenuGroup title="Tools">
<ButtonMenuItem
name="Rustfmt"
onClick={format}>
<span className={styles.shortcut}>⌘/Ctrl + Alt + f</span>
<div>Format this code with Rustfmt.</div>
<MenuAside>{rustfmtVersion} ({rustfmtVersionDetails})</MenuAside>
</ButtonMenuItem>
<ButtonMenuItem
name="Clippy"
onClick={clippy}>
<span className={styles.shortcut}>⌘/Ctrl + Alt + c</span>
<div>Catch common mistakes and improve the code using the Clippy linter.</div>
<MenuAside>{clippyVersion} ({clippyVersionDetails})</MenuAside>
</ButtonMenuItem>
<ButtonMenuItem
name="Miri"
onClick={miri}>
<span className={styles.shortcut}>⌘/Ctrl + Alt + m</span>
<div>
Execute this program in the Miri interpreter to detect certain
cases of undefined behavior (like out-of-bounds memory access).
</div>
<MenuAside>{miriVersion} ({miriVersionDetails})</MenuAside>
</ButtonMenuItem>
<ButtonMenuItem
name="Expand macros"
onClick={expandMacros}>
<span className={styles.shortcut}>⌘/Ctrl + Alt + x</span>
<div>
Expand macros in code using the nightly compiler.
</div>
<MenuAside>{nightlyVersion} ({nightlyVersionDetails})</MenuAside>
</ButtonMenuItem>
</MenuGroup>
);
};
export default ToolsMenu;