diff options
Diffstat (limited to 'devtools/client/debugger/src/actions/sources/symbols.js')
-rw-r--r-- | devtools/client/debugger/src/actions/sources/symbols.js | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/devtools/client/debugger/src/actions/sources/symbols.js b/devtools/client/debugger/src/actions/sources/symbols.js new file mode 100644 index 0000000000..c7b9132c32 --- /dev/null +++ b/devtools/client/debugger/src/actions/sources/symbols.js @@ -0,0 +1,62 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */ + +import { getSymbols } from "../../selectors/index"; + +import { PROMISE } from "../utils/middleware/promise"; +import { loadSourceText } from "./loadSourceText"; + +import { memoizeableAction } from "../../utils/memoizableAction"; +import { fulfilled } from "../../utils/async-value"; + +async function doSetSymbols(location, { dispatch, getState, parserWorker }) { + await dispatch(loadSourceText(location.source, location.sourceActor)); + + await dispatch({ + type: "SET_SYMBOLS", + location, + [PROMISE]: parserWorker.getSymbols(location.source.id), + }); +} + +export const setSymbols = memoizeableAction("setSymbols", { + getValue: (location, { getState, parserWorker }) => { + if (!parserWorker.isLocationSupported(location)) { + return fulfilled(null); + } + + const symbols = getSymbols(getState(), location); + if (!symbols) { + return null; + } + + return fulfilled(symbols); + }, + createKey: location => location.source.id, + action: (location, thunkArgs) => doSetSymbols(location, thunkArgs), +}); + +export function getOriginalFunctionDisplayName(location) { + return async ({ parserWorker, dispatch }) => { + // Make sure the source for the symbols exist in the parser worker. + await dispatch(loadSourceText(location.source, location.sourceActor)); + return parserWorker.getClosestFunctionName(location); + }; +} + +export function getFunctionSymbols(location, maxResults) { + return async ({ parserWorker, dispatch }) => { + // Make sure the source for the symbols exist in the parser worker. + await dispatch(loadSourceText(location.source, location.sourceActor)); + return parserWorker.getFunctionSymbols(location.source.id, maxResults); + }; +} + +export function getClassSymbols(location) { + return async ({ parserWorker, dispatch }) => { + // See comment in getFunctionSymbols + await dispatch(loadSourceText(location.source, location.sourceActor)); + return parserWorker.getClassSymbols(location.source.id); + }; +} |