diff --git a/apps/remix-ide/src/app/ui/TreeView.js b/apps/remix-ide/src/app/ui/TreeView.js index 0e020472e7..413f49f667 100644 --- a/apps/remix-ide/src/app/ui/TreeView.js +++ b/apps/remix-ide/src/app/ui/TreeView.js @@ -176,7 +176,7 @@ class TreeView { formatSelfDefault (key, data) { return yo` -
+
diff --git a/libs/remix-ui/debugger-ui/.eslintrc b/libs/remix-ui/debugger-ui/.eslintrc index 73f9b856ee..b8666066e9 100644 --- a/libs/remix-ui/debugger-ui/.eslintrc +++ b/libs/remix-ui/debugger-ui/.eslintrc @@ -1,250 +1,18 @@ { - "rules": { - "@typescript-eslint/ban-types": "off", - "no-case-declarations": "off", - "array-callback-return": "warn", - "dot-location": ["warn", "property"], - "eqeqeq": ["warn", "smart"], - "new-parens": "warn", - "no-caller": "warn", - "no-cond-assign": ["warn", "except-parens"], - "no-const-assign": "warn", - "no-control-regex": "warn", - "no-delete-var": "warn", - "no-dupe-args": "warn", - "no-dupe-keys": "warn", - "no-duplicate-case": "warn", - "no-empty-character-class": "warn", - "no-empty-pattern": "warn", - "no-eval": "warn", - "no-ex-assign": "warn", - "no-extend-native": "warn", - "no-extra-bind": "warn", - "no-extra-label": "warn", - "no-fallthrough": "warn", - "no-func-assign": "warn", - "no-implied-eval": "warn", - "no-invalid-regexp": "warn", - "no-iterator": "warn", - "no-label-var": "warn", - "no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], - "no-lone-blocks": "warn", - "no-loop-func": "warn", - "no-mixed-operators": [ - "warn", - { - "groups": [ - ["&", "|", "^", "~", "<<", ">>", ">>>"], - ["==", "!=", "===", "!==", ">", ">=", "<", "<="], - ["&&", "||"], - ["in", "instanceof"] - ], - "allowSamePrecedence": false - } - ], - "no-multi-str": "warn", - "no-native-reassign": "warn", - "no-negated-in-lhs": "warn", - "no-new-func": "warn", - "no-new-object": "warn", - "no-new-symbol": "warn", - "no-new-wrappers": "warn", - "no-obj-calls": "warn", - "no-octal": "warn", - "no-octal-escape": "warn", - "no-redeclare": "warn", - "no-regex-spaces": "warn", - "no-restricted-syntax": ["warn", "WithStatement"], - "no-script-url": "warn", - "no-self-assign": "warn", - "no-self-compare": "warn", - "no-sequences": "warn", - "no-shadow-restricted-names": "warn", - "no-sparse-arrays": "warn", - "no-template-curly-in-string": "warn", - "no-this-before-super": "warn", - "no-throw-literal": "warn", - "no-restricted-globals": [ - "error", - "addEventListener", - "blur", - "close", - "closed", - "confirm", - "defaultStatus", - "defaultstatus", - "event", - "external", - "find", - "focus", - "frameElement", - "frames", - "history", - "innerHeight", - "innerWidth", - "length", - "location", - "locationbar", - "menubar", - "moveBy", - "moveTo", - "name", - "onblur", - "onerror", - "onfocus", - "onload", - "onresize", - "onunload", - "open", - "opener", - "opera", - "outerHeight", - "outerWidth", - "pageXOffset", - "pageYOffset", - "parent", - "print", - "removeEventListener", - "resizeBy", - "resizeTo", - "screen", - "screenLeft", - "screenTop", - "screenX", - "screenY", - "scroll", - "scrollbars", - "scrollBy", - "scrollTo", - "scrollX", - "scrollY", - "self", - "status", - "statusbar", - "stop", - "toolbar", - "top" - ], - "no-unexpected-multiline": "warn", - "no-unreachable": "warn", - "no-unused-expressions": [ - "error", - { - "allowShortCircuit": true, - "allowTernary": true, - "allowTaggedTemplates": true - } - ], - "no-unused-labels": "warn", - "no-useless-computed-key": "warn", - "no-useless-concat": "warn", - "no-useless-escape": "warn", - "no-useless-rename": [ - "warn", - { - "ignoreDestructuring": false, - "ignoreImport": false, - "ignoreExport": false - } - ], - "no-with": "warn", - "no-whitespace-before-property": "warn", - "react-hooks/exhaustive-deps": "warn", - "require-yield": "warn", - "rest-spread-spacing": ["warn", "never"], - "strict": ["warn", "never"], - "unicode-bom": ["warn", "never"], - "use-isnan": "warn", - "valid-typeof": "warn", - "no-restricted-properties": [ - "error", - { - "object": "require", - "property": "ensure", - "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" - }, - { - "object": "System", - "property": "import", - "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" - } - ], - "getter-return": "warn", - "import/first": "error", - "import/no-amd": "error", - "import/no-webpack-loader-syntax": "error", - "react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], - "react/jsx-no-comment-textnodes": "warn", - "react/jsx-no-duplicate-props": "warn", - "react/jsx-no-target-blank": "warn", - "react/jsx-no-undef": "error", - "react/jsx-pascal-case": ["warn", { "allowAllCaps": true, "ignore": [] }], - "react/jsx-uses-react": "warn", - "react/jsx-uses-vars": "warn", - "react/no-danger-with-children": "warn", - "react/no-direct-mutation-state": "warn", - "react/no-is-mounted": "warn", - "react/no-typos": "error", - "react/react-in-jsx-scope": "error", - "react/require-render-return": "error", - "react/style-prop-object": "warn", - "react/jsx-no-useless-fragment": "warn", - "jsx-a11y/accessible-emoji": "warn", - "jsx-a11y/alt-text": "warn", - "jsx-a11y/anchor-has-content": "warn", - "jsx-a11y/anchor-is-valid": [ - "warn", - { "aspects": ["noHref", "invalidHref"] } - ], - "jsx-a11y/aria-activedescendant-has-tabindex": "warn", - "jsx-a11y/aria-props": "warn", - "jsx-a11y/aria-proptypes": "warn", - "jsx-a11y/aria-role": "warn", - "jsx-a11y/aria-unsupported-elements": "warn", - "jsx-a11y/heading-has-content": "warn", - "jsx-a11y/iframe-has-title": "warn", - "jsx-a11y/img-redundant-alt": "warn", - "jsx-a11y/no-access-key": "warn", - "jsx-a11y/no-distracting-elements": "warn", - "jsx-a11y/no-redundant-roles": "warn", - "jsx-a11y/role-has-required-aria-props": "warn", - "jsx-a11y/role-supports-aria-props": "warn", - "jsx-a11y/scope": "warn", - "react-hooks/rules-of-hooks": "error", - "default-case": "off", - "no-dupe-class-members": "off", - "no-undef": "off", - "@typescript-eslint/consistent-type-assertions": "warn", - "no-array-constructor": "off", - "@typescript-eslint/no-array-constructor": "warn", - "@typescript-eslint/no-namespace": "error", - "no-use-before-define": "off", - "@typescript-eslint/no-use-before-define": [ - "warn", - { - "functions": false, - "classes": false, - "variables": false, - "typedefs": false - } - ], - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": [ - "warn", - { "args": "none", "ignoreRestSiblings": true } - ], - "no-useless-constructor": "off", - "@typescript-eslint/no-useless-constructor": "warn" - }, "env": { - "browser": true, - "commonjs": true, - "es6": true, - "jest": true, - "node": true + "browser": true, + "es6": true + }, + "extends": "../../../.eslintrc", + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" }, - "settings": { "react": { "version": "detect" } }, - "plugins": ["import", "jsx-a11y", "react", "react-hooks"], - "extends": ["../../../.eslintrc"], - "ignorePatterns": ["!**/*"] -} + "parserOptions": { + "ecmaVersion": 11, + "sourceType": "module" + }, + "rules": { + "standard/no-callback-literal": "off" + } +} diff --git a/libs/remix-ui/debugger-ui/jest.config.js b/libs/remix-ui/debugger-ui/jest.config.js index 7b3def7c76..1505cc5eff 100644 --- a/libs/remix-ui/debugger-ui/jest.config.js +++ b/libs/remix-ui/debugger-ui/jest.config.js @@ -9,4 +9,4 @@ module.exports = { }, moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], coverageDirectory: '../../coverage/libs/debugger-ui' -}; +} diff --git a/libs/remix-ui/debugger-ui/src/hooks/extract-data.tsx b/libs/remix-ui/debugger-ui/src/hooks/extract-data.tsx index da28dfb4bb..e60dccd6e7 100644 --- a/libs/remix-ui/debugger-ui/src/hooks/extract-data.tsx +++ b/libs/remix-ui/debugger-ui/src/hooks/extract-data.tsx @@ -1,58 +1,58 @@ -import React, { useState, useEffect } from 'react' -import { ExtractData, ExtractFunc } from '../types' +import React, { useState, useEffect } from 'react' // eslint-disable-line +import { ExtractData, ExtractFunc } from '../types' // eslint-disable-line export const useExtractData = (json, extractFunc?: ExtractFunc): Array<{ key: string, data: ExtractData }> => { - const [data, setData] = useState([]) - - useEffect(() => { - const data: Array<{ key: string, data: ExtractData }> = Object.keys(json).map((innerKey) => { - if (extractFunc) { - return { - key: innerKey, - data : extractFunc(json[innerKey], json) - } - } else { - return { - key: innerKey, - data: extractDataDefault(json[innerKey], json) - } - } - }) - - setData(data) - - return () => { - setData(null) + const [data, setData] = useState([]) + + useEffect(() => { + const data: Array<{ key: string, data: ExtractData }> = Object.keys(json).map((innerKey) => { + if (extractFunc) { + return { + key: innerKey, + data: extractFunc(json[innerKey], json) } - }, [json, extractFunc]) - - const extractDataDefault: ExtractFunc = (item, parent?) => { - const ret: ExtractData = {} - - if (item instanceof Array) { - ret.children = item.map((item, index) => { - return {key: index, value: item} - }) - ret.self = 'Array' - ret.isNode = true - ret.isLeaf = false - } else if (item instanceof Object) { - ret.children = Object.keys(item).map((key) => { - return {key: key, value: item[key]} - }) - ret.self = 'Object' - ret.isNode = true - ret.isLeaf = false - } else { - ret.self = item - ret.children = null - ret.isNode = false - ret.isLeaf = true + } else { + return { + key: innerKey, + data: extractDataDefault(json[innerKey], json) } - return ret + } + }) + + setData(data) + + return () => { + setData(null) + } + }, [json, extractFunc]) + + const extractDataDefault: ExtractFunc = (item, parent?) => { + const ret: ExtractData = {} + + if (item instanceof Array) { + ret.children = item.map((item, index) => { + return { key: index, value: item } + }) + ret.self = 'Array' + ret.isNode = true + ret.isLeaf = false + } else if (item instanceof Object) { + ret.children = Object.keys(item).map((key) => { + return { key: key, value: item[key] } + }) + ret.self = 'Object' + ret.isNode = true + ret.isLeaf = false + } else { + ret.self = item + ret.children = null + ret.isNode = false + ret.isLeaf = true } + return ret + } - return data + return data } -export default useExtractData \ No newline at end of file +export default useExtractData diff --git a/libs/remix-ui/debugger-ui/src/lib/button-navigator/button-navigator.tsx b/libs/remix-ui/debugger-ui/src/lib/button-navigator/button-navigator.tsx index 8e2a893227..55ffc569b4 100644 --- a/libs/remix-ui/debugger-ui/src/lib/button-navigator/button-navigator.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/button-navigator/button-navigator.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react' +import React, { useState, useEffect } from 'react' // eslint-disable-line import './button-navigator.css' export const ButtonNavigation = ({ stepOverBack, stepIntoBack, stepIntoForward, stepOverForward, jumpOut, jumpPreviousBreakpoint, jumpNextBreakpoint, jumpToException, revertedReason, stepState, jumpOutDisabled }) => { @@ -45,7 +45,7 @@ export const ButtonNavigation = ({ stepOverBack, stepIntoBack, stepIntoForward, intoForwardDisabled: stepState === 'end', overForwardDisabled: stepState === 'end', jumpNextBreakpointDisabled: stepState === 'end', - jumpOutDisabled: jumpOutDisabled ? jumpOutDisabled : true + jumpOutDisabled: jumpOutDisabled || true } }) } @@ -60,7 +60,7 @@ export const ButtonNavigation = ({ stepOverBack, stepIntoBack, stepIntoForward,
- +
diff --git a/libs/remix-ui/debugger-ui/src/lib/debugger-ui.tsx b/libs/remix-ui/debugger-ui/src/lib/debugger-ui.tsx index b8cd7b9bcf..8b159744af 100644 --- a/libs/remix-ui/debugger-ui/src/lib/debugger-ui.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/debugger-ui.tsx @@ -1,11 +1,11 @@ -import React, { useState, useEffect } from 'react' -import TxBrowser from './tx-browser/tx-browser' -import StepManager from './step-manager/step-manager' -import VmDebugger from './vm-debugger/vm-debugger' -import VmDebuggerHead from './vm-debugger/vm-debugger-head' -import { TransactionDebugger as Debugger } from '@remix-project/remix-debug' -import { DebuggerUIProps } from './idebugger-api' -import { Toaster } from '@remix-ui/toaster' +import React, { useState, useEffect } from 'react' // eslint-disable-line +import TxBrowser from './tx-browser/tx-browser' // eslint-disable-line +import StepManager from './step-manager/step-manager' // eslint-disable-line +import VmDebugger from './vm-debugger/vm-debugger' // eslint-disable-line +import VmDebuggerHead from './vm-debugger/vm-debugger-head' // eslint-disable-line +import { TransactionDebugger as Debugger } from '@remix-project/remix-debug' // eslint-disable-line +import { DebuggerUIProps } from './idebugger-api' // eslint-disable-line +import { Toaster } from '@remix-ui/toaster' // eslint-disable-line /* eslint-disable-next-line */ import './debugger-ui.css' @@ -34,7 +34,7 @@ export const DebuggerUI = (props: DebuggerUIProps) => { }, []) debuggerModule.onDebugRequested((hash) => { - if (hash) debug(hash) + if (hash) debug(hash) }) debuggerModule.onRemoveHighlights(async () => { @@ -43,15 +43,14 @@ export const DebuggerUI = (props: DebuggerUIProps) => { useEffect(() => { const setEditor = () => { - debuggerModule.onBreakpointCleared((fileName, row) => { - if (state.debugger) state.debugger.breakPointManager.remove({fileName: fileName, row: row}) + if (state.debugger) state.debugger.breakPointManager.remove({ fileName: fileName, row: row }) }) - + debuggerModule.onBreakpointAdded((fileName, row) => { - if (state.debugger) state.debugger.breakPointManager.add({fileName: fileName, row: row}) + if (state.debugger) state.debugger.breakPointManager.add({ fileName: fileName, row: row }) }) - + debuggerModule.onEditorContentChanged(() => { if (state.debugger) unLoad() }) @@ -65,7 +64,7 @@ export const DebuggerUI = (props: DebuggerUIProps) => { debuggerInstance.event.register('debuggerStatus', async (isActive) => { await debuggerModule.discardHighlight() - setState( prevState => { + setState(prevState => { return { ...prevState, isActive } }) }) @@ -151,7 +150,7 @@ export const DebuggerUI = (props: DebuggerUIProps) => { offsetToLineColumnConverter: debuggerModule.offsetToLineColumnConverter, compilationResult: async (address) => { try { - const ret = await debuggerModule.fetchContractAndCompile(address, currentReceipt) + const ret = await debuggerModule.fetchContractAndCompile(address, currentReceipt) return ret } catch (e) { console.error(e) @@ -184,49 +183,49 @@ export const DebuggerUI = (props: DebuggerUIProps) => { }) } -const debug = (txHash) => { - startDebugging(null, txHash, null) -} + const debug = (txHash) => { + startDebugging(null, txHash, null) + } -const stepManager = { - jumpTo: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.jumpTo.bind(state.debugger.step_manager) : null, - stepOverBack: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.stepOverBack.bind(state.debugger.step_manager) : null, - stepIntoBack: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.stepIntoBack.bind(state.debugger.step_manager) : null, - stepIntoForward: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.stepIntoForward.bind(state.debugger.step_manager) : null, - stepOverForward: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.stepOverForward.bind(state.debugger.step_manager) : null, - jumpOut: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.jumpOut.bind(state.debugger.step_manager) : null, - jumpPreviousBreakpoint: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.jumpPreviousBreakpoint.bind(state.debugger.step_manager) : null, - jumpNextBreakpoint: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.jumpNextBreakpoint.bind(state.debugger.step_manager) : null, - jumpToException: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.jumpToException.bind(state.debugger.step_manager) : null, - traceLength: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.traceLength : null, - registerEvent: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.event.register.bind(state.debugger.step_manager.event) : null, -} -const vmDebugger = { - registerEvent: state.debugger && state.debugger.vmDebuggerLogic ? state.debugger.vmDebuggerLogic.event.register.bind(state.debugger.vmDebuggerLogic.event) : null, - triggerEvent: state.debugger && state.debugger.vmDebuggerLogic ? state.debugger.vmDebuggerLogic.event.trigger.bind(state.debugger.vmDebuggerLogic.event) : null -} - return ( -
- -
-
-

Debugger Configuration

-
- { - setState(prevState => { - return { ...prevState, opt: { debugWithGeneratedSources: checked }} - }) - }} type="checkbox" title="Debug with generated sources" /> - -
+ const stepManager = { + jumpTo: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.jumpTo.bind(state.debugger.step_manager) : null, + stepOverBack: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.stepOverBack.bind(state.debugger.step_manager) : null, + stepIntoBack: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.stepIntoBack.bind(state.debugger.step_manager) : null, + stepIntoForward: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.stepIntoForward.bind(state.debugger.step_manager) : null, + stepOverForward: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.stepOverForward.bind(state.debugger.step_manager) : null, + jumpOut: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.jumpOut.bind(state.debugger.step_manager) : null, + jumpPreviousBreakpoint: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.jumpPreviousBreakpoint.bind(state.debugger.step_manager) : null, + jumpNextBreakpoint: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.jumpNextBreakpoint.bind(state.debugger.step_manager) : null, + jumpToException: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.jumpToException.bind(state.debugger.step_manager) : null, + traceLength: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.traceLength : null, + registerEvent: state.debugger && state.debugger.step_manager ? state.debugger.step_manager.event.register.bind(state.debugger.step_manager.event) : null + } + const vmDebugger = { + registerEvent: state.debugger && state.debugger.vmDebuggerLogic ? state.debugger.vmDebuggerLogic.event.register.bind(state.debugger.vmDebuggerLogic.event) : null, + triggerEvent: state.debugger && state.debugger.vmDebuggerLogic ? state.debugger.vmDebuggerLogic.event.trigger.bind(state.debugger.vmDebuggerLogic.event) : null + } + return ( +
+ +
+
+

Debugger Configuration

+
+ { + setState(prevState => { + return { ...prevState, opt: { debugWithGeneratedSources: checked } } + }) + }} type="checkbox" title="Debug with generated sources" /> +
- - { state.debugging && } - { state.debugging && }
- { state.debugging &&
{ state.statusMessage }
} - { state.debugging && } + + { state.debugging && } + { state.debugging && }
+ { state.debugging &&
{ state.statusMessage }
} + { state.debugging && } +
) } diff --git a/libs/remix-ui/debugger-ui/src/lib/idebugger-api.ts b/libs/remix-ui/debugger-ui/src/lib/idebugger-api.ts index 418cd9ba4a..4919b2ca13 100644 --- a/libs/remix-ui/debugger-ui/src/lib/idebugger-api.ts +++ b/libs/remix-ui/debugger-ui/src/lib/idebugger-api.ts @@ -1,14 +1,14 @@ -import type { CompilationResult, CompilationSource } from '@remix-project/remix-solidity-ts' +import type { CompilationResult, CompilationSource } from '@remix-project/remix-solidity-ts' // eslint-disable-line export interface DebuggerUIProps { - debuggerAPI: IDebuggerApi + debuggerAPI: IDebuggerApi } export interface LineColumnLocation { start: { line: number, column: number - }, + }, end: { line: number, column: number } @@ -39,7 +39,7 @@ export interface TransactionReceipt { transactionIndex: number from: string to: string - contractAddress: string | null + contractAddress: string | null } export type onBreakpointClearedListener = (params: string, row: number) => void @@ -63,4 +63,4 @@ export interface IDebuggerApi { getFile: (path: string) => Promise setFile: (path: string, content: string) => Promise getDebugWeb3: () => any // returns an instance of web3.js -} \ No newline at end of file +} diff --git a/libs/remix-ui/debugger-ui/src/lib/slider/slider.tsx b/libs/remix-ui/debugger-ui/src/lib/slider/slider.tsx index 691b4175a1..81e036a8b8 100644 --- a/libs/remix-ui/debugger-ui/src/lib/slider/slider.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/slider/slider.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react' +import React, { useState, useEffect } from 'react' // eslint-disable-line export const Slider = ({ jumpTo, sliderValue, traceLength }) => { const [state, setState] = useState({ @@ -25,16 +25,16 @@ export const Slider = ({ jumpTo, sliderValue, traceLength }) => { return (
- +
) } diff --git a/libs/remix-ui/debugger-ui/src/lib/step-manager/step-manager.tsx b/libs/remix-ui/debugger-ui/src/lib/step-manager/step-manager.tsx index 75259c179c..4094184310 100644 --- a/libs/remix-ui/debugger-ui/src/lib/step-manager/step-manager.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/step-manager/step-manager.tsx @@ -1,6 +1,6 @@ -import React, { useState, useEffect } from 'react' -import Slider from '../slider/slider' -import ButtonNavigator from '../button-navigator/button-navigator' +import React, { useState, useEffect } from 'react' // eslint-disable-line +import Slider from '../slider/slider' // eslint-disable-line +import ButtonNavigator from '../button-navigator/button-navigator' // eslint-disable-line export const StepManager = ({ stepManager: { jumpTo, traceLength, stepIntoBack, stepIntoForward, stepOverBack, stepOverForward, jumpOut, jumpNextBreakpoint, jumpPreviousBreakpoint, jumpToException, registerEvent } }) => { const [state, setState] = useState({ @@ -31,7 +31,7 @@ export const StepManager = ({ stepManager: { jumpTo, traceLength, stepIntoBack, return (
- { @@ -63,7 +63,7 @@ export const TxBrowser = ({ requestDebug, unloadRequested, transactionNumber, de title={debugging ? 'Stop debugging' : 'Start debugging'} onClick={handleSubmit} data-id="debuggerTransactionStartButton" - disabled={!state.txNumber ? true : false } + disabled={!state.txNumber } > { debugging ? 'Stop' : 'Start' } debugging diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/assembly-items.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/assembly-items.tsx index f0479d8eac..67f9821960 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/assembly-items.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/assembly-items.tsx @@ -1,61 +1,61 @@ -import React, { useState, useRef, useEffect, useReducer } from 'react' +import React, { useState, useRef, useEffect, useReducer } from 'react' // eslint-disable-line import { initialState, reducer } from '../../reducers/assembly-items' import './styles/assembly-items.css' export const AssemblyItems = ({ registerEvent }) => { - const [assemblyItems, dispatch] = useReducer(reducer, initialState) - const [selectedItem, setSelectedItem] = useState(0) - const refs = useRef({}) - const asmItemsRef = useRef(null) - - useEffect(()=>{ - registerEvent && registerEvent('codeManagerChanged', (code, address, index) => { - dispatch({ type: 'FETCH_OPCODES_SUCCESS', payload: { code, address, index } }) - }) - }, []) - - useEffect(() => { - if (selectedItem !== assemblyItems.index) { - indexChanged(assemblyItems.index) - } - }, [assemblyItems.index]) - - const indexChanged = (index: number) => { - if (index < 0) return - let currentItem = refs.current[selectedItem] ? refs.current[selectedItem] : null - - if (currentItem) { - currentItem.removeAttribute('selected') - currentItem.removeAttribute('style') - if (currentItem.firstChild) { - currentItem.firstChild.removeAttribute('style') - } - const codeView = asmItemsRef.current - - currentItem = codeView.children[index] - currentItem.style.setProperty('border-color', 'var(--primary)') - currentItem.style.setProperty('border-style', 'solid') - currentItem.setAttribute('selected', 'selected') - codeView.scrollTop = currentItem.offsetTop - parseInt(codeView.offsetTop) - setSelectedItem(index) - } + const [assemblyItems, dispatch] = useReducer(reducer, initialState) + const [selectedItem, setSelectedItem] = useState(0) + const refs = useRef({}) + const asmItemsRef = useRef(null) + + useEffect(() => { + registerEvent && registerEvent('codeManagerChanged', (code, address, index) => { + dispatch({ type: 'FETCH_OPCODES_SUCCESS', payload: { code, address, index } }) + }) + }, []) + + useEffect(() => { + if (selectedItem !== assemblyItems.index) { + indexChanged(assemblyItems.index) + } + }, [assemblyItems.index]) + + const indexChanged = (index: number) => { + if (index < 0) return + let currentItem = refs.current[selectedItem] ? refs.current[selectedItem] : null + + if (currentItem) { + currentItem.removeAttribute('selected') + currentItem.removeAttribute('style') + if (currentItem.firstChild) { + currentItem.firstChild.removeAttribute('style') + } + const codeView = asmItemsRef.current + + currentItem = codeView.children[index] + currentItem.style.setProperty('border-color', 'var(--primary)') + currentItem.style.setProperty('border-style', 'solid') + currentItem.setAttribute('selected', 'selected') + codeView.scrollTop = currentItem.offsetTop - parseInt(codeView.offsetTop) + setSelectedItem(index) } + } - return ( -
-
-
-
- { - assemblyItems.display.map((item, i) => { - return
refs.current[i] = ref}>{item}
- }) - } -
-
-
+ return ( +
+
+
+
+ { + assemblyItems.display.map((item, i) => { + return
{ refs.current[i] = ref }}>{item}
+ }) + } +
- ) +
+
+ ) } -export default AssemblyItems \ No newline at end of file +export default AssemblyItems diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/calldata-panel.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/calldata-panel.tsx index 78f8d89b78..bf9cba0173 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/calldata-panel.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/calldata-panel.tsx @@ -1,12 +1,12 @@ -import React from 'react' -import DropdownPanel from './dropdown-panel' +import React from 'react' // eslint-disable-line +import DropdownPanel from './dropdown-panel' // eslint-disable-line export const CalldataPanel = ({ calldata }) => { - return ( -
- -
- ) + return ( +
+ +
+ ) } -export default CalldataPanel \ No newline at end of file +export default CalldataPanel diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/callstack-panel.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/callstack-panel.tsx index 2ac5adb2ed..9b9d9b93e9 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/callstack-panel.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/callstack-panel.tsx @@ -1,12 +1,12 @@ -import React from 'react' -import DropdownPanel from './dropdown-panel' +import React from 'react' // eslint-disable-line +import DropdownPanel from './dropdown-panel' // eslint-disable-line export const CallstackPanel = ({ calldata }) => { - return ( -
- -
- ) + return ( +
+ +
+ ) } -export default CallstackPanel \ No newline at end of file +export default CallstackPanel diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/code-list-view.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/code-list-view.tsx index 0869755cb1..59df67d5ee 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/code-list-view.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/code-list-view.tsx @@ -1,38 +1,7 @@ -import React, { useState, useEffect } from 'react' -import AssemblyItems from './assembly-items' +import React, { useState, useEffect } from 'react' // eslint-disable-line +import AssemblyItems from './assembly-items' // eslint-disable-line export const CodeListView = ({ registerEvent }) => { - const [state, setState] = useState({ - code: [], - address: '', - itemSelected: null, - index: null - }) - - const indexChanged = (index) => { - if(index < 0) return - setState(prevState => { - return { - ...prevState, - index - } - }) - } - - const changed = (code, address, index) => { - if (state.address === address) { - return indexChanged(index) - } - setState(prevState => { - return { - ...prevState, - code, - address - } - }) - indexChanged(index) - } - return (
diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/dropdown-panel.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/dropdown-panel.tsx index fe79e93539..7a93aa426d 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/dropdown-panel.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/dropdown-panel.tsx @@ -1,211 +1,211 @@ -import React, { useState, useEffect, useReducer } from 'react' -import { TreeView, TreeViewItem } from '@remix-ui/tree-view' -import { DropdownPanelProps, ExtractData, ExtractFunc } from '../../types' -import { CopyToClipboard } from '@remix-ui/clipboard' +import React, { useState, useEffect, useReducer } from 'react' // eslint-disable-line +import { TreeView, TreeViewItem } from '@remix-ui/tree-view' // eslint-disable-line +import { DropdownPanelProps, ExtractData, ExtractFunc } from '../../types' // eslint-disable-line +import { CopyToClipboard } from '@remix-ui/clipboard' // eslint-disable-line import { initialState, reducer } from '../../reducers/calldata' import './styles/dropdown-panel.css' export const DropdownPanel = (props: DropdownPanelProps) => { - const [calldataObj, dispatch] = useReducer(reducer, initialState) - const { dropdownName, dropdownMessage, calldata, header, loading, extractFunc, formatSelfFunc, registerEvent, triggerEvent, loadMoreEvent, loadMoreCompletedEvent } = props - const extractDataDefault: ExtractFunc = (item, parent?) => { - const ret: ExtractData = {} - - if (item instanceof Array) { - ret.children = item.map((item, index) => { - return {key: index, value: item} - }) - ret.self = 'Array' - ret.isNode = true - ret.isLeaf = false - } else if (item instanceof Object) { - ret.children = Object.keys(item).map((key) => { - return {key: key, value: item[key]} - }) - ret.self = 'Object' - ret.isNode = true - ret.isLeaf = false - } else { - ret.self = item - ret.children = null - ret.isNode = false - ret.isLeaf = true - } - return ret + const [calldataObj, dispatch] = useReducer(reducer, initialState) + const { dropdownName, dropdownMessage, calldata, header, loading, extractFunc, formatSelfFunc, registerEvent, triggerEvent, loadMoreEvent, loadMoreCompletedEvent } = props + const extractDataDefault: ExtractFunc = (item, parent?) => { + const ret: ExtractData = {} + + if (item instanceof Array) { + ret.children = item.map((item, index) => { + return { key: index, value: item } + }) + ret.self = 'Array' + ret.isNode = true + ret.isLeaf = false + } else if (item instanceof Object) { + ret.children = Object.keys(item).map((key) => { + return { key: key, value: item[key] } + }) + ret.self = 'Object' + ret.isNode = true + ret.isLeaf = false + } else { + ret.self = item + ret.children = null + ret.isNode = false + ret.isLeaf = true } - const formatSelfDefault = (key: string | number, data: ExtractData) => { - return ( -
- - -
- ) + return ret + } + const formatSelfDefault = (key: string | number, data: ExtractData) => { + return ( +
+ + +
+ ) + } + const [state, setState] = useState({ + header: '', + toggleDropdown: false, + message: { + innerText: 'No data available.', + display: 'block' + }, + dropdownContent: { + innerText: '', + display: 'none' + }, + title: { + innerText: '', + display: 'none' + }, + copiableContent: '', + updating: false, + expandPath: [], + data: null + }) + + useEffect(() => { + registerEvent && registerEvent(loadMoreCompletedEvent, (updatedCalldata) => { + dispatch({ type: 'UPDATE_CALLDATA_SUCCESS', payload: updatedCalldata }) + }) + }, []) + + useEffect(() => { + dispatch({ type: 'FETCH_CALLDATA_SUCCESS', payload: calldata }) + }, [calldata]) + + useEffect(() => { + update(calldata) + }, [calldataObj.calldata]) + + useEffect(() => { + message(dropdownMessage) + }, [dropdownMessage]) + + useEffect(() => { + if (loading && !state.updating) setLoading() + }, [loading]) + + const handleToggle = () => { + setState(prevState => { + return { + ...prevState, + toggleDropdown: !prevState.toggleDropdown + } + }) + } + + const handleExpand = (keyPath) => { + if (!state.expandPath.includes(keyPath)) { + state.expandPath.push(keyPath) + } else { + state.expandPath = state.expandPath.filter(path => !path.startsWith(keyPath)) } - const [state, setState] = useState({ - header: '', - toggleDropdown: false, + } + + const message = (message) => { + if (message === state.message.innerText) return + setState(prevState => { + return { + ...prevState, message: { - innerText: 'No data available.', - display: 'block' + innerText: message, + display: message ? 'block' : '' }, - dropdownContent: { - innerText: '', - display: 'none' + updating: false + } + }) + } + + const setLoading = () => { + setState(prevState => { + return { + ...prevState, + message: { + innerText: '', + display: 'none' }, - title: { - innerText: '', - display: 'none' + dropdownContent: { + ...prevState.dropdownContent, + display: 'none' }, copiableContent: '', - updating: false, - expandPath: [], - data: null + updating: true + } }) + } - useEffect(() => { - registerEvent && registerEvent(loadMoreCompletedEvent, (updatedCalldata) => { - dispatch({ type: 'UPDATE_CALLDATA_SUCCESS', payload: updatedCalldata }) - }) - }, []) - - useEffect(() => { - dispatch({ type: 'FETCH_CALLDATA_SUCCESS', payload: calldata }) - }, [calldata]) - - useEffect(() => { - update(calldata) - }, [calldataObj.calldata]) - - useEffect(() => { - message(dropdownMessage) - }, [dropdownMessage]) - - useEffect(() => { - if (loading && !state.updating) setLoading() - }, [loading]) - - const handleToggle = () => { - setState(prevState => { - return { - ...prevState, - toggleDropdown: !prevState.toggleDropdown - } - }) - } - - const handleExpand = (keyPath) => { - if (!state.expandPath.includes(keyPath)) { - state.expandPath.push(keyPath) - } else { - state.expandPath = state.expandPath.filter(path => !path.startsWith(keyPath)) - } - } - - const message = (message) => { - if (message === state.message.innerText) return - setState(prevState => { - return { - ...prevState, - message: { - innerText: message, - display: message ? 'block' : '' - }, - updating: false - } - }) - } + const update = function (calldata) { + let isEmpty = !calldata - const setLoading = () => { - setState(prevState => { - return { - ...prevState, - message: { - innerText: '', - display: 'none' - }, - dropdownContent: { - ...prevState.dropdownContent, - display: 'none' - }, - copiableContent: '', - updating: true - } - }) - } + if (calldata && Array.isArray(calldata) && calldata.length === 0) isEmpty = true + else if (calldata && Object.keys(calldata).length === 0 && calldata.constructor === Object) isEmpty = true - const update = function (calldata) { - let isEmpty = !calldata ? true : false - - if(calldata && Array.isArray(calldata) && calldata.length === 0) isEmpty = true - else if(calldata && Object.keys(calldata).length === 0 && calldata.constructor === Object) isEmpty = true - - setState(prevState => { - return { - ...prevState, - dropdownContent: { - ...prevState.dropdownContent, - display: 'block' - }, - copiableContent: JSON.stringify(calldata, null, '\t'), - message: { - innerText: isEmpty ? 'No data available' : '', - display: isEmpty ? 'block' : 'none' - }, - updating: false, - toggleDropdown: !isEmpty, - data: calldata - } - }) - } + setState(prevState => { + return { + ...prevState, + dropdownContent: { + ...prevState.dropdownContent, + display: 'block' + }, + copiableContent: JSON.stringify(calldata, null, '\t'), + message: { + innerText: isEmpty ? 'No data available' : '', + display: isEmpty ? 'block' : 'none' + }, + updating: false, + toggleDropdown: !isEmpty, + data: calldata + } + }) + } + + const renderData = (item: ExtractData, parent, key: string | number, keyPath: string) => { + const data = extractFunc ? extractFunc(item, parent) : extractDataDefault(item, parent) + const children = (data.children || []).map((child) => { + return ( + renderData(child.value, data, child.key, keyPath + '/' + child.key) + ) + }) - const renderData = (item: ExtractData, parent, key: string | number, keyPath: string) => { - const data = extractFunc ? extractFunc(item, parent) : extractDataDefault(item, parent) - const children = (data.children || []).map((child) => { - return ( - renderData(child.value, data, child.key, keyPath + '/' + child.key) - ) - }) - - if (children && children.length > 0 ) { - return ( - handleExpand(keyPath)} expand={state.expandPath.includes(keyPath)}> - - { children } - { data.hasNext && { triggerEvent(loadMoreEvent, [data.cursor]) }} /> } - - - ) - } else { - return handleExpand(keyPath)} expand={state.expandPath.includes(keyPath)} /> - } + if (children && children.length > 0) { + return ( + handleExpand(keyPath)} expand={state.expandPath.includes(keyPath)}> + + {children} + {data.hasNext && { triggerEvent(loadMoreEvent, [data.cursor]) }} />} + + + ) + } else { + return handleExpand(keyPath)} expand={state.expandPath.includes(keyPath)} /> } - - const uniquePanelName = dropdownName.split(' ').join('') - - return ( -
-
-
-
{dropdownName}
{ header } - -
-
- -
- { - state.data && - - { - Object.keys(state.data).map((innerkey) => renderData(state.data[innerkey], state.data, innerkey, innerkey)) - } - - } -
- -
{ state.message.innerText }
-
+ } + + const uniquePanelName = dropdownName.split(' ').join('') + + return ( +
+
+
+
{dropdownName}
{header} + +
+
+ +
+ { + state.data && + + { + Object.keys(state.data).map((innerkey) => renderData(state.data[innerkey], state.data, innerkey, innerkey)) + } + + }
- ) + +
{state.message.innerText}
+
+
+ ) } -export default DropdownPanel \ No newline at end of file +export default DropdownPanel diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/full-storages-changes.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/full-storages-changes.tsx index 7ba3374187..c7de304965 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/full-storages-changes.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/full-storages-changes.tsx @@ -1,12 +1,12 @@ -import React from 'react' -import { DropdownPanel } from './dropdown-panel' +import React from 'react' // eslint-disable-line +import { DropdownPanel } from './dropdown-panel' // eslint-disable-line export const FullStoragesChanges = ({ calldata }) => { - return ( -
- -
- ) + return ( +
+ +
+ ) } -export default FullStoragesChanges \ No newline at end of file +export default FullStoragesChanges diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/function-panel.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/function-panel.tsx index 333c79dedc..6fa7686d5f 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/function-panel.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/function-panel.tsx @@ -1,19 +1,19 @@ -import React, { useState, useEffect } from 'react' -import DropdownPanel from './dropdown-panel' -import { default as deepequal } from 'deep-equal' +import React, { useState, useEffect } from 'react' // eslint-disable-line +import DropdownPanel from './dropdown-panel' // eslint-disable-line +import { default as deepequal } from 'deep-equal' // eslint-disable-line export const FunctionPanel = ({ data }) => { - const [calldata, setCalldata] = useState(null) + const [calldata, setCalldata] = useState(null) - useEffect(() => { - if (!deepequal(calldata, data)) setCalldata(data) - }, [data]) + useEffect(() => { + if (!deepequal(calldata, data)) setCalldata(data) + }, [data]) - return ( -
- -
- ) + return ( +
+ +
+ ) } export default FunctionPanel diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/memory-panel.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/memory-panel.tsx index 2685586356..b772369ec6 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/memory-panel.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/memory-panel.tsx @@ -1,10 +1,10 @@ -import React from 'react' -import DropdownPanel from './dropdown-panel' +import React from 'react' // eslint-disable-line +import DropdownPanel from './dropdown-panel' // eslint-disable-line export const MemoryPanel = ({ calldata }) => { - return ( - - ) + return ( + + ) } -export default MemoryPanel \ No newline at end of file +export default MemoryPanel diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/solidity-locals.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/solidity-locals.tsx index 99662cc6d0..15ee3d2bb8 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/solidity-locals.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/solidity-locals.tsx @@ -1,62 +1,62 @@ -import React, { useState, useEffect } from 'react' -import DropdownPanel from './dropdown-panel' -import { extractData } from '../../utils/solidityTypeFormatter' -import { ExtractData } from '../../types' +import React, { useState, useEffect } from 'react' // eslint-disable-line +import DropdownPanel from './dropdown-panel' // eslint-disable-line +import { extractData } from '../../utils/solidityTypeFormatter' // eslint-disable-line +import { ExtractData } from '../../types' // eslint-disable-line export const SolidityLocals = ({ data, message, registerEvent, triggerEvent }) => { - const [calldata, setCalldata] = useState(null) + const [calldata, setCalldata] = useState(null) - useEffect(() => { - data && setCalldata(data) - }, [data]) + useEffect(() => { + data && setCalldata(data) + }, [data]) - const formatSelf = (key: string, data: ExtractData) => { - let color = 'var(--primary)' - if (data.isArray || data.isStruct || data.isMapping) { - color = 'var(--info)' - } else if ( - data.type.indexOf('uint') === 0 || - data.type.indexOf('int') === 0 || - data.type.indexOf('bool') === 0 || - data.type.indexOf('enum') === 0 - ) { - color = 'var(--green)' - } else if (data.type === 'string') { - color = 'var(--teal)' - } else if (data.self == 0x0) { // eslint-disable-line - color = 'var(--gray)' - } - if (data.type === 'string') { - data.self = JSON.stringify(data.self) - } - return ( - - ) + const formatSelf = (key: string, data: ExtractData) => { + let color = 'var(--primary)' + if (data.isArray || data.isStruct || data.isMapping) { + color = 'var(--info)' + } else if ( + data.type.indexOf('uint') === 0 || + data.type.indexOf('int') === 0 || + data.type.indexOf('bool') === 0 || + data.type.indexOf('enum') === 0 + ) { + color = 'var(--green)' + } else if (data.type === 'string') { + color = 'var(--teal)' + } else if (data.self == 0x0) { // eslint-disable-line + color = 'var(--gray)' + } + if (data.type === 'string') { + data.self = JSON.stringify(data.self) } - return ( -
- -
+ ) + } + + return ( +
+ +
+ ) } -export default SolidityLocals \ No newline at end of file +export default SolidityLocals diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/solidity-state.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/solidity-state.tsx index 023dbe205d..0bc60b9a3f 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/solidity-state.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/solidity-state.tsx @@ -1,45 +1,45 @@ -import React from 'react' -import DropdownPanel from './dropdown-panel' +import React from 'react' // eslint-disable-line +import DropdownPanel from './dropdown-panel' // eslint-disable-line import { extractData } from '../../utils/solidityTypeFormatter' -import { ExtractData } from '../../types' +import { ExtractData } from '../../types' // eslint-disable-line export const SolidityState = ({ calldata, message }) => { - const formatSelf = (key: string, data: ExtractData) => { - let color = 'var(--primary)' - if (data.isArray || data.isStruct || data.isMapping) { - color = 'var(--info)' - } else if ( - data.type.indexOf('uint') === 0 || + const formatSelf = (key: string, data: ExtractData) => { + let color = 'var(--primary)' + if (data.isArray || data.isStruct || data.isMapping) { + color = 'var(--info)' + } else if ( + data.type.indexOf('uint') === 0 || data.type.indexOf('int') === 0 || data.type.indexOf('bool') === 0 || data.type.indexOf('enum') === 0 - ) { - color = 'var(--green)' - } else if (data.type === 'string') { - color = 'var(--teal)' + ) { + color = 'var(--green)' + } else if (data.type === 'string') { + color = 'var(--teal)' } else if (data.self == 0x0) { // eslint-disable-line - color = 'var(--gray)' - } - return ( - - ) + color = 'var(--gray)' } - return ( -
- { - - } -
+ ) + } + + return ( +
+ { + + } +
+ ) } -export default SolidityState \ No newline at end of file +export default SolidityState diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/stack-panel.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/stack-panel.tsx index 65c9a75140..fcb86b2699 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/stack-panel.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/stack-panel.tsx @@ -1,12 +1,12 @@ -import React from 'react' -import DropdownPanel from './dropdown-panel' +import React from 'react' // eslint-disable-line +import DropdownPanel from './dropdown-panel' // eslint-disable-line export const StackPanel = ({ calldata }) => { - return ( -
- -
- ) + return ( +
+ +
+ ) } -export default StackPanel \ No newline at end of file +export default StackPanel diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/step-detail.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/step-detail.tsx index 4acde10731..15d17a7792 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/step-detail.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/step-detail.tsx @@ -1,12 +1,12 @@ -import React from 'react' -import DropdownPanel from './dropdown-panel' +import React from 'react' // eslint-disable-line +import DropdownPanel from './dropdown-panel' // eslint-disable-line export const StepDetail = ({ stepDetail }) => { - return ( -
- -
- ) + return ( +
+ +
+ ) } -export default StepDetail \ No newline at end of file +export default StepDetail diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/storage-panel.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/storage-panel.tsx index 0520d5d099..f7f8ce1714 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/storage-panel.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/storage-panel.tsx @@ -1,12 +1,12 @@ -import React from 'react' -import DropdownPanel from './dropdown-panel' +import React from 'react' // eslint-disable-line +import DropdownPanel from './dropdown-panel' // eslint-disable-line export const StoragePanel = ({ calldata, header }) => { - return ( -
- -
- ) + return ( +
+ +
+ ) } -export default StoragePanel \ No newline at end of file +export default StoragePanel diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger-head.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger-head.tsx index b28cc36066..8a951cf4fa 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger-head.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger-head.tsx @@ -1,9 +1,9 @@ -import React, { useState, useEffect } from 'react' -import CodeListView from './code-list-view' -import FunctionPanel from './function-panel' -import StepDetail from './step-detail' -import SolidityState from './solidity-state' -import SolidityLocals from './solidity-locals' +import React, { useState, useEffect } from 'react' // eslint-disable-line +import CodeListView from './code-list-view' // eslint-disable-line +import FunctionPanel from './function-panel' // eslint-disable-line +import StepDetail from './step-detail' // eslint-disable-line +import SolidityState from './solidity-state' // eslint-disable-line +import SolidityLocals from './solidity-locals' // eslint-disable-line export const VmDebuggerHead = ({ vmDebugger: { registerEvent, triggerEvent } }) => { const [functionPanel, setFunctionPanel] = useState(null) @@ -11,24 +11,24 @@ export const VmDebuggerHead = ({ vmDebugger: { registerEvent, triggerEvent } }) 'vm trace step': '-', 'execution step': '-', 'add memory': '', - 'gas': '', + gas: '', 'remaining gas': '-', 'loaded address': '-' }) const [solidityState, setSolidityState] = useState({ calldata: null, - message: null, + message: null }) const [solidityLocals, setSolidityLocals] = useState({ calldata: null, - message: null, + message: null }) useEffect(() => { registerEvent && registerEvent('functionsStackUpdate', (stack) => { if (stack === null || stack.length === 0) return const functions = [] - + for (const func of stack) { functions.push(func.functionDefinition.name + '(' + func.inputs.join(', ') + ')') } @@ -36,12 +36,12 @@ export const VmDebuggerHead = ({ vmDebugger: { registerEvent, triggerEvent } }) }) registerEvent && registerEvent('traceUnloaded', () => { setStepDetail(() => { - return { 'vm trace step': '-', 'execution step': '-', 'add memory': '', 'gas': '', 'remaining gas': '-', 'loaded address': '-' } + return { 'vm trace step': '-', 'execution step': '-', 'add memory': '', gas: '', 'remaining gas': '-', 'loaded address': '-' } }) }) registerEvent && registerEvent('newTraceLoaded', () => { setStepDetail(() => { - return { 'vm trace step': '-', 'execution step': '-', 'add memory': '', 'gas': '', 'remaining gas': '-', 'loaded address': '-' } + return { 'vm trace step': '-', 'execution step': '-', 'add memory': '', gas: '', 'remaining gas': '-', 'loaded address': '-' } }) }) registerEvent && registerEvent('traceCurrentStepUpdate', (error, step) => { @@ -56,7 +56,7 @@ export const VmDebuggerHead = ({ vmDebugger: { registerEvent, triggerEvent } }) }) registerEvent && registerEvent('traceStepCostUpdate', (error, gas) => { setStepDetail(prevState => { - return { ...prevState, 'gas': (error ? '-' : gas) } + return { ...prevState, gas: (error ? '-' : gas) } }) }) registerEvent && registerEvent('traceCurrentCalledAddressAtUpdate', (error, address) => { @@ -97,15 +97,15 @@ export const VmDebuggerHead = ({ vmDebugger: { registerEvent, triggerEvent } }) }, [registerEvent]) return ( -
-
-
+
+
+
-
-
+
+
) diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger.tsx index 00642d864b..a02b95a377 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger.tsx @@ -1,11 +1,11 @@ -import React, { useState, useEffect } from 'react' -import CalldataPanel from './calldata-panel' -import MemoryPanel from './memory-panel' -import CallstackPanel from './callstack-panel' -import StackPanel from './stack-panel' -import StoragePanel from './storage-panel' -import ReturnValuesPanel from './dropdown-panel' -import FullStoragesChangesPanel from './full-storages-changes' +import React, { useState, useEffect } from 'react' // eslint-disable-line +import CalldataPanel from './calldata-panel' // eslint-disable-line +import MemoryPanel from './memory-panel' // eslint-disable-line +import CallstackPanel from './callstack-panel' // eslint-disable-line +import StackPanel from './stack-panel' // eslint-disable-line +import StoragePanel from './storage-panel' // eslint-disable-line +import ReturnValuesPanel from './dropdown-panel' // eslint-disable-line +import FullStoragesChangesPanel from './full-storages-changes' // eslint-disable-line export const VmDebugger = ({ vmDebugger: { registerEvent } }) => { const [calldataPanel, setCalldataPanel] = useState(null) @@ -51,14 +51,14 @@ export const VmDebugger = ({ vmDebugger: { registerEvent } }) => { }, [registerEvent]) return ( -
+
- +
diff --git a/libs/remix-ui/debugger-ui/src/reducers/assembly-items.ts b/libs/remix-ui/debugger-ui/src/reducers/assembly-items.ts index 12af113a14..4038cce2d9 100644 --- a/libs/remix-ui/debugger-ui/src/reducers/assembly-items.ts +++ b/libs/remix-ui/debugger-ui/src/reducers/assembly-items.ts @@ -1,4 +1,4 @@ -import { default as deepEqual } from 'deep-equal' +import { default as deepEqual } from 'deep-equal' // eslint-disable-line interface Action { type: string; @@ -6,18 +6,18 @@ interface Action { } export const initialState = { - opCodes: { - code: [], - index: 0, - address: '' - }, - display: [], + opCodes: { + code: [], index: 0, - top: 0, - bottom: 0, - isRequesting: false, - isSuccessful: false, - hasError: null + address: '' + }, + display: [], + index: 0, + top: 0, + bottom: 0, + isRequesting: false, + isSuccessful: false, + hasError: null } export const reducer = (state = initialState, action: Action) => { @@ -28,36 +28,36 @@ export const reducer = (state = initialState, action: Action) => { isRequesting: true, isSuccessful: false, hasError: null - }; + } } case 'FETCH_OPCODES_SUCCESS': { - const opCodes = action.payload.address === state.opCodes.address ? { - ...state.opCodes, index: action.payload.index + const opCodes = action.payload.address === state.opCodes.address ? { + ...state.opCodes, index: action.payload.index } : deepEqual(action.payload.code, state.opCodes.code) ? state.opCodes : action.payload const top = opCodes.index - 3 > 0 ? opCodes.index - 3 : 0 const bottom = opCodes.index + 4 < opCodes.code.length ? opCodes.index + 4 : opCodes.code.length - const display = opCodes.code.slice(top, bottom) + const display = opCodes.code.slice(top, bottom) return { - opCodes, - display, - index: display.findIndex(code => code === opCodes.code[opCodes.index]), - top, - bottom, - isRequesting: false, - isSuccessful: true, - hasError: null - }; + opCodes, + display, + index: display.findIndex(code => code === opCodes.code[opCodes.index]), + top, + bottom, + isRequesting: false, + isSuccessful: true, + hasError: null + } } case 'FETCH_OPCODES_ERROR': { return { - ...state, - isRequesting: false, - isSuccessful: false, - hasError: action.payload - }; + ...state, + isRequesting: false, + isSuccessful: false, + hasError: action.payload + } } default: - throw new Error(); + throw new Error() } -} \ No newline at end of file +} diff --git a/libs/remix-ui/debugger-ui/src/reducers/calldata.ts b/libs/remix-ui/debugger-ui/src/reducers/calldata.ts index aa37739a7a..e33425d8fd 100644 --- a/libs/remix-ui/debugger-ui/src/reducers/calldata.ts +++ b/libs/remix-ui/debugger-ui/src/reducers/calldata.ts @@ -4,58 +4,58 @@ interface Action { } export const initialState = { - calldata: {}, - isRequesting: false, - isSuccessful: false, - hasError: null + calldata: {}, + isRequesting: false, + isSuccessful: false, + hasError: null } export const reducer = (state = initialState, action: Action) => { switch (action.type) { case 'FETCH_CALLDATA_REQUEST': return { - ...state, - isRequesting: true, - isSuccessful: false, - hasError: null - }; + ...state, + isRequesting: true, + isSuccessful: false, + hasError: null + } case 'FETCH_CALLDATA_SUCCESS': return { - calldata: action.payload, - isRequesting: false, - isSuccessful: true, - hasError: null - }; + calldata: action.payload, + isRequesting: false, + isSuccessful: true, + hasError: null + } case 'FETCH_CALLDATA_ERROR': - return { - ...state, - isRequesting: false, - isSuccessful: false, - hasError: action.payload - }; + return { + ...state, + isRequesting: false, + isSuccessful: false, + hasError: action.payload + } case 'UPDATE_CALLDATA_REQUEST': return { - ...state, - isRequesting: true, - isSuccessful: false, - hasError: null - }; + ...state, + isRequesting: true, + isSuccessful: false, + hasError: null + } case 'UPDATE_CALLDATA_SUCCESS': return { - calldata: mergeLocals(action.payload, state.calldata), - isRequesting: false, - isSuccessful: true, - hasError: null - }; + calldata: mergeLocals(action.payload, state.calldata), + isRequesting: false, + isSuccessful: true, + hasError: null + } case 'UPDATE_CALLDATA_ERROR': - return { - ...state, - isRequesting: false, - isSuccessful: false, - hasError: action.payload - }; + return { + ...state, + isRequesting: false, + isSuccessful: false, + hasError: action.payload + } default: - throw new Error(); + throw new Error() } } @@ -69,4 +69,4 @@ function mergeLocals (locals1, locals2) { } }) return locals2 -} \ No newline at end of file +} diff --git a/libs/remix-ui/debugger-ui/src/types/index.ts b/libs/remix-ui/debugger-ui/src/types/index.ts index 7b3861b251..45a26384dc 100644 --- a/libs/remix-ui/debugger-ui/src/types/index.ts +++ b/libs/remix-ui/debugger-ui/src/types/index.ts @@ -30,4 +30,4 @@ export interface DropdownPanelProps { loadMoreCompletedEvent?: string } -export type FormatSelfFunc = (key: string | number, data: ExtractData) => JSX.Element \ No newline at end of file +export type FormatSelfFunc = (key: string | number, data: ExtractData) => JSX.Element diff --git a/libs/remix-ui/debugger-ui/src/utils/solidityTypeFormatter.ts b/libs/remix-ui/debugger-ui/src/utils/solidityTypeFormatter.ts index c0d0dfcb3b..65ad0d61a0 100644 --- a/libs/remix-ui/debugger-ui/src/utils/solidityTypeFormatter.ts +++ b/libs/remix-ui/debugger-ui/src/utils/solidityTypeFormatter.ts @@ -1,44 +1,44 @@ import { BN } from 'ethereumjs-util' -import { ExtractData } from '../types' +import { ExtractData } from '../types' // eslint-disable-line export function extractData (item, parent): ExtractData { - const ret: ExtractData = {} + const ret: ExtractData = {} - if (item.isProperty) { - return item - } - if (item.type.lastIndexOf(']') === item.type.length - 1) { - ret.children = (item.value || []).map(function (item, index) { - return {key: index, value: item} - }) - ret.children.unshift({ - key: 'length', - value: { - self: (new BN(item.length.replace('0x', ''), 16)).toString(10), - type: 'uint', - isProperty: true - } - }) - ret.isArray = true - ret.self = parent.isArray ? '' : item.type - ret.cursor = item.cursor - ret.hasNext = item.hasNext - } else if (item.type.indexOf('struct') === 0) { - ret.children = Object.keys((item.value || {})).map(function (key) { - return {key: key, value: item.value[key]} - }) - ret.self = item.type - ret.isStruct = true - } else if (item.type.indexOf('mapping') === 0) { - ret.children = Object.keys((item.value || {})).map(function (key) { - return {key: key, value: item.value[key]} - }) - ret.isMapping = true - ret.self = item.type - } else { - ret.children = null - ret.self = item.value - ret.type = item.type - } - return ret -} \ No newline at end of file + if (item.isProperty) { + return item + } + if (item.type.lastIndexOf(']') === item.type.length - 1) { + ret.children = (item.value || []).map(function (item, index) { + return { key: index, value: item } + }) + ret.children.unshift({ + key: 'length', + value: { + self: (new BN(item.length.replace('0x', ''), 16)).toString(10), + type: 'uint', + isProperty: true + } + }) + ret.isArray = true + ret.self = parent.isArray ? '' : item.type + ret.cursor = item.cursor + ret.hasNext = item.hasNext + } else if (item.type.indexOf('struct') === 0) { + ret.children = Object.keys((item.value || {})).map(function (key) { + return { key: key, value: item.value[key] } + }) + ret.self = item.type + ret.isStruct = true + } else if (item.type.indexOf('mapping') === 0) { + ret.children = Object.keys((item.value || {})).map(function (key) { + return { key: key, value: item.value[key] } + }) + ret.isMapping = true + ret.self = item.type + } else { + ret.children = null + ret.self = item.value + ret.type = item.type + } + return ret +} diff --git a/package.json b/package.json index 04c5887ac2..783ad4b020 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "workspace-schematic": "nx workspace-schematic", "dep-graph": "nx dep-graph", "help": "nx help", - "lint:libs": "nx run-many --target=lint --projects=remixd,remix-ui-tree-view,remix-ui-modal-dialog,remix-ui-toaster,remix-ui-file-explorer", + "lint:libs": "nx run-many --target=lint --projects=remixd,remix-ui-tree-view,remix-ui-modal-dialog,remix-ui-toaster,remix-ui-file-explorer,remix-ui-debugger-ui", "build:libs": "nx run-many --target=build --parallel=false --with-deps=true --projects=remix-analyzer,remix-astwalker,remix-debug,remix-lib,remix-simulator,remix-solidity,remix-tests,remix-url-resolver,remixd", "test:libs": "nx run-many --target=test --projects=remix-analyzer,remix-astwalker,remix-debug,remix-lib,remix-simulator,remix-solidity,remix-tests,remix-url-resolver,remixd", "publish:libs": "npm run build:libs & lerna publish --skip-git & npm run bumpVersion:libs",