Skip to content

Commit

Permalink
simplify logic on no arg commands
Browse files Browse the repository at this point in the history
  • Loading branch information
joswig committed Dec 18, 2024
1 parent a9d1030 commit e6bfa13
Showing 1 changed file with 31 additions and 54 deletions.
85 changes: 31 additions & 54 deletions src/utilities/sequence-editor/sequence-linter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1212,79 +1212,56 @@ function validateAndLintArguments(
* Validates the command structure.
* @param stemNode - The SyntaxNode representing the command stem.
* @param argsNode - The SyntaxNode representing the command arguments.
* @param exactArgSize - The expected number of arguments.
* @param expectedArgSize - The expected number of arguments.
* @param addDefault - The function to add default arguments.
* @returns A Diagnostic object representing the validation error, or undefined if there is no error.
*/
function validateCommandStructure(
stemNode: SyntaxNode,
argsNode: SyntaxNode[] | null,
exactArgSize: number,
expectedArgSize: number,
addDefault: (view: any) => any,
): Diagnostic | undefined {
if (arguments.length > 0) {
if (!argsNode || argsNode.length === 0) {
return {
actions: [],
from: stemNode.from,
message: `The stem is missing arguments.`,
severity: 'error',
to: stemNode.to,
};
}
if (argsNode.length > exactArgSize) {
const extraArgs = argsNode.slice(exactArgSize);
const { from, to } = getFromAndTo(extraArgs);
return {
actions: [
{
apply(view, from, to) {
view.dispatch({ changes: { from, to } });
},
name: `Remove ${extraArgs.length} extra argument${extraArgs.length > 1 ? 's' : ''}`,
},
],
from,
message: `Extra arguments, definition has ${exactArgSize}, but ${argsNode.length} are present`,
severity: 'error',
to,
};
}
if (argsNode.length < exactArgSize) {
const { from, to } = getFromAndTo(argsNode);
const pluralS = exactArgSize > argsNode.length + 1 ? 's' : '';
return {
actions: [
{
apply(view) {
addDefault(view);
},
name: `Add default missing argument${pluralS}`,
},
],
from,
message: `Missing argument${pluralS}, definition has ${argsNode.length}, but ${exactArgSize} are present`,
severity: 'error',
to,
};
}
} else if (argsNode && argsNode.length > 0) {
const { from, to } = getFromAndTo(argsNode);
if ((!argsNode || argsNode.length === 0) && expectedArgSize === 0) {
return undefined;
}
if (argsNode && argsNode.length > expectedArgSize) {
const extraArgs = argsNode.slice(expectedArgSize);
const { from, to } = getFromAndTo(extraArgs);
return {
actions: [
{
apply(view, from, to) {
view.dispatch({ changes: { from, to } });
},
name: `Remove argument${argsNode.length > 1 ? 's' : ''}`,
name: `Remove ${extraArgs.length} extra argument${extraArgs.length > 1 ? 's' : ''}`,
},
],
from: from,
message: 'The command should not have arguments',
from,
message: `Extra arguments, definition has ${expectedArgSize}, but ${argsNode.length} are present`,
severity: 'error',
to: to,
to,
};
}
if ((argsNode && argsNode.length < expectedArgSize) || (!argsNode && expectedArgSize > 0)) {
const { from, to } = getFromAndTo(argsNode ?? [stemNode]);
const pluralS = expectedArgSize - (argsNode?.length ?? 0) > 1 ? 's' : '';
return {
actions: [
{
apply(view) {
addDefault(view);
},
name: `Add default missing argument${pluralS}`,
},
],
from,
message: `Missing argument${pluralS}, definition has ${expectedArgSize}, but ${argsNode?.length ?? 0} are present`,
severity: 'error',
to,
};
}

return undefined;
}

Expand Down

0 comments on commit e6bfa13

Please sign in to comment.