fish-lsp
Version:
LSP implementation for fish/fish-shell
45 lines (44 loc) • 1.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BindOptions = void 0;
exports.isBindCommand = isBindCommand;
exports.isBindKeySequence = isBindKeySequence;
exports.isBindFunctionCall = isBindFunctionCall;
const options_1 = require("./options");
const node_types_1 = require("../utils/node-types");
exports.BindOptions = [
options_1.Option.create('-f', '--function-names'),
options_1.Option.create('-K', '--key-names'),
options_1.Option.create('-L', '--list-modes'),
options_1.Option.create('-M', '--mode').withValue(),
options_1.Option.create('-m', '--new-mode').withValue(),
options_1.Option.create('-e', '--erase'),
options_1.Option.create('-a', '--all'),
options_1.Option.long('--preset').withAliases('--user'),
options_1.Option.create('-s', '--silent'),
options_1.Option.create('-h', '--help'),
];
function isBindCommand(node) {
return (0, node_types_1.isCommandWithName)(node, 'bind');
}
function isBindKeySequence(node) {
const parent = (0, node_types_1.findParentCommand)(node);
if (!parent || !isBindCommand(parent)) {
return false;
}
const children = parent.namedChildren.slice(1);
const optionResults = (0, options_1.findOptions)(children, exports.BindOptions);
const { remaining } = optionResults;
return remaining.at(0)?.equals(node);
}
function isBindFunctionCall(node) {
const parent = (0, node_types_1.findParentCommand)(node);
if (!parent || !isBindCommand(parent)) {
return false;
}
const children = parent.namedChildren.slice(1);
const optionResults = (0, options_1.findOptions)(children, exports.BindOptions);
const { remaining } = optionResults;
const functionCalls = remaining.slice(1);
return functionCalls.some(child => (0, node_types_1.isFunctionDefinitionName)(child) && child.equals(node));
}