public void ApplyJSON() { if (!File.Exists(JSONConfigFile)) { Reporter.AddError(ExceptionMessages.config_file_not_existing); return; } JObject baseToken = JObject.Parse(File.ReadAllText(JSONConfigFile)); SafelyPerform((token) => { LanguageServerConfig.LogFile = Path.Combine(FileAndFolderLocations.rootFolder, (string)token); }, baseToken, "logging", "log"); SafelyPerform((token) => { LanguageServerConfig.RedirectedStreamFile = Path.Combine(FileAndFolderLocations.rootFolder, (string)token); }, baseToken, "logging", "stream"); SafelyPerform((token) => { LanguageServerConfig.LogLevel = (LogLevel)(int)token; }, baseToken, "logging", "loglevel"); SafelyPerform((token) => { LanguageServerConfig.SyncKind = (TextDocumentSyncKind)Enum.Parse(typeof(TextDocumentSyncKind), (string)token, true); }, baseToken, "synckind"); }
private void HandleArgumentPair(IReadOnlyList <string> splitted) { string key = splitted[0]; string value = splitted[1]; if (value.Length < 1) { Reporter.AddError(ExceptionMessages.no_arg_for_switch + key); return; } switch (key.ToLower()) { case "/stream": LanguageServerConfig.RedirectedStreamFile = Path.Combine(FileAndFolderLocations.rootFolder, value); break; case "/log": LanguageServerConfig.LogFile = Path.Combine(FileAndFolderLocations.rootFolder, value); break; case "/loglevel": LanguageServerConfig.LogLevel = (LogLevel)int.Parse(value); break; case "/synckind": LanguageServerConfig.SyncKind = (TextDocumentSyncKind)Enum.Parse(typeof(TextDocumentSyncKind), value, true); break; default: Reporter.AddError(string.Format(ExceptionMessages.unknown_switch, key)); break; } }
/// <summary> /// This methods sets up the config. /// First, defaults are set. /// Then, they are overwritten by the JSON, if provided. /// Then, they are overwritten by launch arguments, if provided. /// <remarks> /// The method will run to completion and provide defaults in case of errors. /// In case of errors, they are available in the <c>InitializationErrors</c> property. /// </remarks> /// </summary> public void SetUp() { try { ApplyDefaults(); ApplyJSON(); ApplyArgs(); Validate(); } catch (Exception e) { Reporter.AddError(e); ApplyDefaults(); } }
public void ApplyArgs() { foreach (var arg in LaunchArguments) { try { string[] splitted = arg.Split(':'); if (splitted.Length != 2) { Reporter.AddError(ExceptionMessages.not_supported_launch_args); } HandleArgumentPair(splitted); } catch (Exception e) { Reporter.AddError(e); } } }
private void SafelyPerform(Action <JToken> a, JToken baseToken, params string[] subTokens) { var token = baseToken; try { foreach (string st in subTokens) { token = token[st]; if (token == null) { return; } } a.Invoke(token); } catch (Exception e) { Reporter.AddError(e); } }