11import React , { useCallback } from 'react' ;
22
33import { Either as EitherConfig , Select as SelectConfig } from './ConfigElement' ;
4+ import MenuAside from './MenuAside' ;
45import MenuGroup from './MenuGroup' ;
56import { useAppDispatch , useAppSelector } from './hooks' ;
67import * as config from './reducers/configuration' ;
78import * as selectors from './selectors' ;
8- import { Backtrace , Edition } from './types' ;
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+ ) ;
919
1020const AdvancedOptionsMenu : React . FC = ( ) => {
1121 const isEditionDefault = useAppSelector ( selectors . isEditionDefault ) ;
1222 const edition = useAppSelector ( ( state ) => state . configuration . edition ) ;
1323 const isBacktraceDefault = useAppSelector ( selectors . isBacktraceDefault ) ;
1424 const backtrace = useAppSelector ( ( state ) => state . configuration . backtrace ) ;
25+ const isAliasingModelDefault = useAppSelector ( selectors . isAliasingModelDefault ) ;
26+ const aliasingModel = useAppSelector ( ( state ) => state . configuration . aliasingModel ) ;
1527
1628 const dispatch = useAppDispatch ( ) ;
1729
@@ -20,33 +32,52 @@ const AdvancedOptionsMenu: React.FC = () => {
2032 ( b : Backtrace ) => dispatch ( config . changeBacktrace ( b ) ) ,
2133 [ dispatch ] ,
2234 ) ;
35+ const changeAliasingModel = useCallback (
36+ ( b : AliasingModel ) => dispatch ( config . changeAliasingModel ( b ) ) ,
37+ [ dispatch ] ,
38+ ) ;
2339
2440 return (
25- < MenuGroup title = "Advanced options" >
26- < SelectConfig
27- name = "Edition"
28- value = { edition }
29- isDefault = { isEditionDefault }
30- onChange = { changeEdition }
31- >
32- < option value = { Edition . Rust2015 } > 2015</ option >
33- < option value = { Edition . Rust2018 } > 2018</ option >
34- < option value = { Edition . Rust2021 } > 2021</ option >
35- < option value = { Edition . Rust2024 } > 2024</ option >
36- </ SelectConfig >
37-
38- < EitherConfig
39- id = "backtrace"
40- name = "Backtrace"
41- a = { Backtrace . Enabled }
42- b = { Backtrace . Disabled }
43- aLabel = "On"
44- bLabel = "Off"
45- value = { backtrace }
46- isDefault = { isBacktraceDefault }
47- onChange = { changeBacktrace }
48- />
49- </ 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+ </ >
5081 ) ;
5182} ;
5283
0 commit comments