fix(ecs): Make commands case-insensitive
Resolves #439
This would make all commands case-insensitive instead of allowing commands to be case-insensitive. Might be good to make it a configuration option on EcsBuilder
@ikkentim This is the expected behavior. All SA-MP server commands are case-insensitive. In my opinion, this should not be a configuration option. This should be the default behavior, otherwise the Principle of least astonishment would be violated.
PD: I have updated the title of the PR, it is a fix rather than a feature.
@ikkentim This is the expected behavior. All SA-MP server commands are case-insensitive. In my opinion, this should not be a configuration option. This should be the default behavior, otherwise the Principle of least astonishment would be violated.
When you use OnPlayerCommandText, it's up to you to decide how to handle the command text, including case sensitive, isn't it? Even strcmp accepts such a parameter. Command processors and the fact that it is a de facto standard is another matter
In my opinion (...) This should be the default behavior
You counter your own point here, besides, it would be a breaking change due to behavioral changes in existing systems
Yes, it is a breaking change, but it is worth it, and even if we use a configuration option, it also introduces a breaking change, because we would have to inject an EcsOptions class in the CommandServiceBase constructor.
PD: To merge this PR, tell me specifically what I need to modify.
the easiest way would be a simple extension on IEcsBuilder.
public static class CommandEcsBuilderExtensions
{
// note: default values in parameters reflect the default
// todo: xml doc block
public static IEcsBuilder ConfigureCommandService(this IEcsBuilder builder, bool ignoreCase = false)
{
var commandService = builder.Services.GetRequiredService<ICommandService>();
commandService.IgnoreCase = ignoreCase; // todo: add property to service
return builder;
}
}
might also want to use a method instead of a property for IgnoreCase in the command service, since it needs to recreate the commands dictionary with a different key comparator.