Source code

Revision control

Copy as Markdown

Other Tools

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