diff --git a/src/cs-mic-cli/Functions/PrintVariables.cs b/src/cs-mic-cli/Functions/PrintVariables.cs index 4431fda..3a2b0bd 100644 --- a/src/cs-mic-cli/Functions/PrintVariables.cs +++ b/src/cs-mic-cli/Functions/PrintVariables.cs @@ -59,7 +59,7 @@ namespace cs_mic_cli.Functions Console.WriteLine("{0}. {1} {2} = {3}", variableIndex++, variable.Type, variable.Name, displayValue); } - return FunctionValue.NONE; + return FunctionValue.ZERO; } } } diff --git a/src/cs-mic-cli/Functions/Version.cs b/src/cs-mic-cli/Functions/Version.cs new file mode 100644 index 0000000..699016c --- /dev/null +++ b/src/cs-mic-cli/Functions/Version.cs @@ -0,0 +1,100 @@ +using CSMic; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace cs_mic_cli.Functions +{ + internal class Version : ICodedFunction + { + private static Lazy versionCLI = new Lazy(() => + { + string version = GetVersion(Assembly.GetExecutingAssembly()); + + return string.Format("{0,-20} {1}", "CLI", version); + }); + + private static Lazy versionCSMIC = new Lazy(() => + { + string version = GetVersion(typeof(CSMic.InputInterpreter).Assembly); + + return string.Format("{0,-20} {1}", "CS-MIC", version); + }); + + private static Lazy versionStandardLibrary = new Lazy(() => + { + string version = GetVersion(typeof(CSMic.StandardLibrary.Initializer).Assembly); + + return string.Format("{0,-20} {1}", "Standard Library", version); + }); + + public static string VersionCLI + { + get + { + return versionCLI.Value; + } + } + + public static string VersionCSMIC + { + get + { + return versionCSMIC.Value; + } + } + + public static string VersionStandardLibrary + { + get + { + return versionStandardLibrary.Value; + } + } + + public string Name + { + get + { + return "version"; + } + } + + public IEnumerable ExpectedArguments + { + get + { + yield break; + } + + } + + public FunctionValue ReturnValue + { + get + { + return FunctionValue.NONE; + } + } + + public FunctionValue Execute(params FunctionArgument[] args) + { + Console.WriteLine(VersionCLI); + Console.WriteLine(VersionCSMIC); + Console.WriteLine(VersionStandardLibrary); + + return FunctionValue.ZERO; + } + + static string GetVersion(Assembly assembly) + { + var version = assembly.GetName()?.Version?.ToString() + ?? "Unknown"; + + return version; + } + } +} diff --git a/src/cs-mic-cli/Options.cs b/src/cs-mic-cli/Options.cs index edbd808..d69d661 100644 --- a/src/cs-mic-cli/Options.cs +++ b/src/cs-mic-cli/Options.cs @@ -6,6 +6,8 @@ public bool Interactive { get; set; } + public bool Version { get; set; } + public IEnumerable Expression { get; set; } = Array.Empty(); } } diff --git a/src/cs-mic-cli/Program.cs b/src/cs-mic-cli/Program.cs index 4c6a82e..068f137 100644 --- a/src/cs-mic-cli/Program.cs +++ b/src/cs-mic-cli/Program.cs @@ -18,6 +18,10 @@ namespace cs_mic_cli { Description = "Starts an interactive session." }; + var versionOption = new Option("--version", "-v") + { + Description = "Prints the version number of CS-MIC." + }; var expressionArgument = new Argument("expression") { Arity = ArgumentArity.ZeroOrMore, @@ -46,6 +50,7 @@ namespace cs_mic_cli { Verbose = parseResult.GetValue(verboseOption), Interactive = parseResult.GetValue(interactiveOption), + Version = parseResult.GetValue(versionOption), Expression = parseResult.GetValue(expressionArgument) ?? Array.Empty() }; @@ -62,12 +67,20 @@ namespace cs_mic_cli Initializer.InitializeAll(inputInterpreter); inputInterpreter.RegisterFunction(new PrintVariables(inputInterpreter)); + inputInterpreter.RegisterFunction(new Functions.Version()); if(!options.Verbose) { CSMic.Interpreter.Errors.errorStream = TextWriter.Null; } + if(options.Version) + { + Console.WriteLine(Functions.Version.VersionCLI); + Console.WriteLine(Functions.Version.VersionCSMIC); + Console.WriteLine(Functions.Version.VersionStandardLibrary); + } + if (string.IsNullOrWhiteSpace(fullExpression) || options.Interactive) { // console mode diff --git a/src/cs-mic-cli/cs-mic-cli.csproj b/src/cs-mic-cli/cs-mic-cli.csproj index bb71e68..974db74 100644 --- a/src/cs-mic-cli/cs-mic-cli.csproj +++ b/src/cs-mic-cli/cs-mic-cli.csproj @@ -1,19 +1,20 @@  - - Exe - net8.0 - cs_mic_cli - enable - enable - true - true - + + Exe + net8.0 + cs_mic_cli + enable + enable + true + true + 1.0.0 + - - - - - + + + + +