/* 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 . */ 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, 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); }; }