|
1 | 1 | import React, { useCallback } from 'react'; |
2 | 2 |
|
3 | | -import * as config from './reducers/configuration'; |
4 | 3 | import { Either as EitherConfig, Select as SelectConfig } from './ConfigElement'; |
| 4 | +import MenuAside from './MenuAside'; |
5 | 5 | import MenuGroup from './MenuGroup'; |
6 | | -import * as selectors from './selectors'; |
7 | | -import { Backtrace, Edition } from './types'; |
8 | 6 | import { useAppDispatch, useAppSelector } from './hooks'; |
| 7 | +import * as config from './reducers/configuration'; |
| 8 | +import * as selectors from './selectors'; |
| 9 | +import { AliasingModel, Backtrace, Edition } from './types'; |
| 10 | + |
| 11 | +const MIRI_TREE_BORROWS_URL = 'https://github.com/rust-lang/miri#user-content--zmiri-tree-borrows'; |
| 12 | + |
| 13 | +const TreeBorrowAside: React.FC = () => ( |
| 14 | + <MenuAside> |
| 15 | + Code that is accepted by <a href={MIRI_TREE_BORROWS_URL}>Tree Borrows</a> may be declared |
| 16 | + undefined behavior in the future. |
| 17 | + </MenuAside> |
| 18 | +); |
9 | 19 |
|
10 | 20 | const AdvancedOptionsMenu: React.FC = () => { |
11 | 21 | const isEditionDefault = useAppSelector(selectors.isEditionDefault); |
12 | 22 | const edition = useAppSelector((state) => state.configuration.edition); |
13 | | - const isBacktraceSet = useAppSelector(selectors.getBacktraceSet); |
| 23 | + const isBacktraceDefault = useAppSelector(selectors.isBacktraceDefault); |
14 | 24 | const backtrace = useAppSelector((state) => state.configuration.backtrace); |
| 25 | + const isAliasingModelDefault = useAppSelector(selectors.isAliasingModelDefault); |
| 26 | + const aliasingModel = useAppSelector((state) => state.configuration.aliasingModel); |
15 | 27 |
|
16 | 28 | const dispatch = useAppDispatch(); |
17 | 29 |
|
18 | 30 | const changeEdition = useCallback((e: Edition) => dispatch(config.changeEdition(e)), [dispatch]); |
19 | | - const changeBacktrace = useCallback((b: Backtrace) => dispatch(config.changeBacktrace(b)), [dispatch]); |
| 31 | + const changeBacktrace = useCallback( |
| 32 | + (b: Backtrace) => dispatch(config.changeBacktrace(b)), |
| 33 | + [dispatch], |
| 34 | + ); |
| 35 | + const changeAliasingModel = useCallback( |
| 36 | + (b: AliasingModel) => dispatch(config.changeAliasingModel(b)), |
| 37 | + [dispatch], |
| 38 | + ); |
20 | 39 |
|
21 | 40 | return ( |
22 | | - <MenuGroup title="Advanced options"> |
23 | | - <SelectConfig |
24 | | - name="Edition" |
25 | | - value={edition} |
26 | | - isNotDefault={!isEditionDefault} |
27 | | - onChange={changeEdition} |
28 | | - > |
29 | | - <option value={Edition.Rust2015}>2015</option> |
30 | | - <option value={Edition.Rust2018}>2018</option> |
31 | | - <option value={Edition.Rust2021}>2021</option> |
32 | | - <option value={Edition.Rust2024}>2024</option> |
33 | | - </SelectConfig> |
34 | | - |
35 | | - <EitherConfig |
36 | | - id="backtrace" |
37 | | - name="Backtrace" |
38 | | - a={Backtrace.Disabled} |
39 | | - b={Backtrace.Enabled} |
40 | | - value={backtrace} |
41 | | - isNotDefault={isBacktraceSet} |
42 | | - onChange={changeBacktrace} /> |
43 | | - </MenuGroup> |
| 41 | + <> |
| 42 | + <MenuGroup title="Advanced options"> |
| 43 | + <SelectConfig |
| 44 | + name="Edition" |
| 45 | + value={edition} |
| 46 | + isDefault={isEditionDefault} |
| 47 | + onChange={changeEdition} |
| 48 | + > |
| 49 | + <option value={Edition.Rust2015}>2015</option> |
| 50 | + <option value={Edition.Rust2018}>2018</option> |
| 51 | + <option value={Edition.Rust2021}>2021</option> |
| 52 | + <option value={Edition.Rust2024}>2024</option> |
| 53 | + </SelectConfig> |
| 54 | + |
| 55 | + <EitherConfig |
| 56 | + id="backtrace" |
| 57 | + name="Backtrace" |
| 58 | + a={Backtrace.Enabled} |
| 59 | + b={Backtrace.Disabled} |
| 60 | + aLabel="On" |
| 61 | + bLabel="Off" |
| 62 | + value={backtrace} |
| 63 | + isDefault={isBacktraceDefault} |
| 64 | + onChange={changeBacktrace} |
| 65 | + /> |
| 66 | + </MenuGroup> |
| 67 | + |
| 68 | + <MenuGroup title="Miri"> |
| 69 | + <EitherConfig |
| 70 | + id="aliasingModel" |
| 71 | + name="Aliasing model" |
| 72 | + a={AliasingModel.Stacked} |
| 73 | + b={AliasingModel.Tree} |
| 74 | + value={aliasingModel} |
| 75 | + isDefault={isAliasingModelDefault} |
| 76 | + onChange={changeAliasingModel} |
| 77 | + aside={<TreeBorrowAside />} |
| 78 | + /> |
| 79 | + </MenuGroup> |
| 80 | + </> |
44 | 81 | ); |
45 | 82 | }; |
46 | 83 |
|
|
0 commit comments