@@ -13,9 +13,12 @@ import {
1313 scrollToLogLine ,
1414 scrollToCLine ,
1515 siblingInsLine ,
16+ getVisibleLogLines ,
17+ getVisibleCLines ,
1618} from "./utils" ;
1719
1820import {
21+ VisualLogState ,
1922 LogLineState ,
2023 Example ,
2124 HoveredLineHint ,
@@ -24,13 +27,39 @@ import {
2427 SelectedLineHint ,
2528 ToolTip ,
2629} from "./components" ;
27- import { ParsedLine , ParsedLineType } from "./parser" ;
30+ import { ParsedLineType } from "./parser" ;
31+
32+ function getEmptyVisualLogState ( ) : VisualLogState {
33+ return {
34+ verifierLogState : getEmptyVerifierState ( ) ,
35+ logLines : [ ] ,
36+ logLineIdToIdx : new Map ( ) ,
37+ cLines : [ ] ,
38+ cLineIdtoIdx : new Map ( ) ,
39+ } ;
40+ }
41+
42+ function getVisualLogState (
43+ verifierLogState : VerifierLogState ,
44+ fullLogView : boolean ,
45+ ) : VisualLogState {
46+ const [ logLines , logLineIdToIdx ] = getVisibleLogLines (
47+ verifierLogState ,
48+ fullLogView ,
49+ ) ;
50+ const [ cLines , cLineIdtoIdx ] = getVisibleCLines ( verifierLogState ) ;
51+ return {
52+ verifierLogState : verifierLogState ,
53+ logLines,
54+ logLineIdToIdx,
55+ cLines,
56+ cLineIdtoIdx,
57+ } ;
58+ }
2859
2960const ContentRaw = ( {
3061 loadError,
31- verifierLogState,
32- logLines,
33- logLineIdToIdx,
62+ visualLogState,
3463 selectedLine,
3564 selectedMemSlotId,
3665 selectedCLine,
@@ -43,9 +72,7 @@ const ContentRaw = ({
4372 handleStateRowClick,
4473} : {
4574 loadError : string | null ;
46- verifierLogState : VerifierLogState ;
47- logLines : ParsedLine [ ] ;
48- logLineIdToIdx : Map < number , number > ;
75+ visualLogState : VisualLogState ;
4976 selectedLine : number ;
5077 selectedMemSlotId : string ;
5178 selectedCLine : number ;
@@ -59,12 +86,10 @@ const ContentRaw = ({
5986} ) => {
6087 if ( loadError ) {
6188 return < div > { loadError } </ div > ;
62- } else if ( logLines . length > 0 ) {
89+ } else if ( visualLogState . logLines . length > 0 ) {
6390 return (
6491 < MainContent
65- verifierLogState = { verifierLogState }
66- logLines = { logLines }
67- logLineIdToIdx = { logLineIdToIdx }
92+ visualLogState = { visualLogState }
6893 selectedLine = { selectedLine }
6994 selectedMemSlotId = { selectedMemSlotId }
7095 selectedCLine = { selectedCLine }
@@ -90,8 +115,8 @@ const ContentRaw = ({
90115const Content = React . memo ( ContentRaw ) ;
91116
92117function App ( ) {
93- const [ verifierLogState , setVerifierLogState ] = useState < VerifierLogState > (
94- getEmptyVerifierState ( ) ,
118+ const [ visualLogState , setVisualLogState ] = useState < VisualLogState > (
119+ getEmptyVisualLogState ( ) ,
95120 ) ;
96121 const [ hoveredState , setHoveredState ] = useState < LogLineState > ( {
97122 memSlotId : "" ,
@@ -108,22 +133,8 @@ function App() {
108133
109134 const fileInputRef = useRef < HTMLInputElement > ( null ) ;
110135
111- const { cLines, cLineIdtoIdx } = verifierLogState ;
112-
113- const [ logLines , logLineIdToIdx ] = useMemo ( ( ) => {
114- const logLines : ParsedLine [ ] = [ ] ;
115- const logLineIdToIdx : Map < number , number > = new Map ( ) ;
116-
117- let idx = 0 ;
118- verifierLogState . lines . forEach ( ( line ) => {
119- if ( line . type !== ParsedLineType . C_SOURCE || fullLogView ) {
120- logLines . push ( line ) ;
121- logLineIdToIdx . set ( line . idx , idx ++ ) ;
122- }
123- } ) ;
124-
125- return [ logLines , logLineIdToIdx ] ;
126- } , [ verifierLogState , fullLogView ] ) ;
136+ const { verifierLogState, cLines, cLineIdtoIdx, logLines, logLineIdToIdx } =
137+ visualLogState ;
127138
128139 const { line : selectedLine , memSlotId : selectedMemSlotId } = selectedState ;
129140 const selectedLineIdx = logLineIdToIdx . get ( selectedLine ) || 0 ;
@@ -189,7 +200,7 @@ function App() {
189200 }
190201
191202 const onClear = useCallback ( ( ) => {
192- setVerifierLogState ( getEmptyVerifierState ( ) ) ;
203+ setVisualLogState ( getEmptyVisualLogState ( ) ) ;
193204 setSelectedState ( { line : 0 , memSlotId : "" , cLine : "" } ) ;
194205 const fiCurrent = fileInputRef . current ;
195206 if ( fiCurrent ) {
@@ -199,7 +210,18 @@ function App() {
199210
200211 const onLogToggle = useCallback ( ( ) => {
201212 setfullLogView ( ( prev ) => ! prev ) ;
202- } , [ ] ) ;
213+ const [ newLogLines , newLogLineIdToIdx ] = getVisibleLogLines (
214+ verifierLogState ,
215+ ! fullLogView ,
216+ ) ;
217+ setVisualLogState ( ( prev ) => {
218+ return {
219+ ...prev ,
220+ logLines : newLogLines ,
221+ logLineIdToIdx : newLogLineIdToIdx ,
222+ } ;
223+ } ) ;
224+ } , [ fullLogView , verifierLogState ] ) ;
203225
204226 useEffect ( ( ) => {
205227 const handleKeyDown = ( e : KeyboardEvent ) => {
@@ -291,9 +313,13 @@ function App() {
291313 onGotoEnd ( ) ;
292314 } , [ verifierLogState ] ) ;
293315
294- const loadInputText = useCallback ( ( text : string ) => {
295- setVerifierLogState ( processRawLines ( text . split ( "\n" ) ) ) ;
296- } , [ ] ) ;
316+ const loadInputText = useCallback (
317+ ( text : string ) => {
318+ const newVerifierLogState = processRawLines ( text . split ( "\n" ) ) ;
319+ setVisualLogState ( getVisualLogState ( newVerifierLogState , fullLogView ) ) ;
320+ } ,
321+ [ fullLogView ] ,
322+ ) ;
297323
298324 const handlePaste = useCallback (
299325 ( event : React . ClipboardEvent ) => {
@@ -508,7 +534,8 @@ function App() {
508534 }
509535 rawLines = rawLines . concat ( lines ) ;
510536 }
511- setVerifierLogState ( processRawLines ( rawLines ) ) ;
537+ const newVerifierLogState = processRawLines ( rawLines ) ;
538+ setVisualLogState ( getVisualLogState ( newVerifierLogState , fullLogView ) ) ;
512539 }
513540 } ,
514541 [ ] ,
@@ -562,9 +589,7 @@ function App() {
562589 </ div >
563590 < Content
564591 loadError = { loadError }
565- verifierLogState = { verifierLogState }
566- logLines = { logLines }
567- logLineIdToIdx = { logLineIdToIdx }
592+ visualLogState = { visualLogState }
568593 selectedLine = { selectedLine }
569594 selectedMemSlotId = { selectedMemSlotId }
570595 selectedCLine = { selectedCLine }
0 commit comments