Exemplo n.º 1
0
        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");
        }
Exemplo n.º 2
0
        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();
     }
 }
Exemplo n.º 4
0
        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);
                }
            }
        }
Exemplo n.º 5
0
        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);
            }
        }