import React, { useEffect, useState } from "react"; import { H3, TextArea, Button, Pre, Loader } from "../components"; import styled from "styled-components"; import { postVscMessage, withProgress } from "../vscode"; import { useDebugContextValue } from "../redux/hooks"; import CodeMultiselect from "../components/CodeMultiselect"; import { useSelector } from "react-redux"; import { selectDebugContext } from "../redux/selectors/debugContextSelectors"; import { useDispatch } from "react-redux"; import { updateValue } from "../redux/slices/debugContexSlice"; import { setWorkspacePath } from "../redux/slices/configSlice"; import { SerializedDebugContext } from "../../../src/client"; import { useEditCache } from "../util/editCache"; import { useApi } from "../util/api"; const ButtonDiv = styled.div` display: flex; justify-content: space-between; align-items: center; gap: 4px; margin: 4px; flex-wrap: wrap; & button { flex-grow: 1; } `; function MainTab(props: any) { const dispatch = useDispatch(); const [suggestion, setSuggestion] = useState(""); const [traceback, setTraceback] = useDebugContextValue("traceback", ""); const [selectedRanges, setSelectedRanges] = useDebugContextValue( "rangesInFiles", [] ); const editCache = useEditCache(); const { debugApi } = useApi(); const [responseLoading, setResponseLoading] = useState(false); let debugContext = useSelector(selectDebugContext); useEffect(() => { editCache.preloadEdit(debugContext); }, [debugContext]); function postVscMessageWithDebugContext( type: string, overrideDebugContext: SerializedDebugContext | null = null ) { postVscMessage(type, { debugContext: overrideDebugContext || debugContext, }); } function launchFindSuspiciousCode(newTraceback: string) { // setTraceback's effects don't occur immediately, so we have to add it to the debug context manually let updatedDebugContext = { ...debugContext, traceback: newTraceback, }; postVscMessageWithDebugContext("findSuspiciousCode", updatedDebugContext); postVscMessageWithDebugContext("preloadEdit", updatedDebugContext); } useEffect(() => { const eventListener = (event: any) => { switch (event.data.type) { case "suggestFix": case "explainCode": case "listTenThings": setSuggestion(event.data.value); setResponseLoading(false); break; case "traceback": setTraceback(event.data.value); launchFindSuspiciousCode(event.data.value); break; case "workspacePath": dispatch(setWorkspacePath(event.data.value)); break; } }; window.addEventListener("message", eventListener); return () => window.removeEventListener("message", eventListener); }, [debugContext, selectedRanges]); return (

Debug Panel

Code Sections

Bug Description

Stack Trace



); } export default MainTab;