예제 #1
0
        public static List <JSLintError> FindTodos(string file)
        {
            int lastindex              = -1;
            int lastline               = 1;
            List <JSLintError> todos   = new List <JSLintError>();
            MatchCollection    matches = FindTodoRegex.Matches(file);

            foreach (Match match in matches)
            {
                int indexOfTODO = -1;

                while (true)
                {
                    indexOfTODO = match.Captures[0].Value.IndexOf("TODO", indexOfTODO + 1, StringComparison.InvariantCultureIgnoreCase);
                    if (indexOfTODO < 0)
                    {
                        break;
                    }

                    char characterBefore = indexOfTODO > 2 ? match.Captures[0].Value[indexOfTODO - 1] : ' ';
                    char characterAfter  = indexOfTODO + 4 >= match.Captures[0].Value.Length ? ' ' : match.Captures[0].Value[indexOfTODO + 4];

                    if (char.IsWhiteSpace(characterBefore) && !char.IsLetter(characterAfter))
                    {
                        break;
                    }
                }

                if (indexOfTODO < 0)
                {
                    continue;
                }

                while (true)
                {
                    int i = file.IndexOf('\n', lastindex + 1);
                    if (i > match.Index || i <= 0)
                    {
                        break;
                    }
                    lastline++;
                    lastindex = i;
                }

                JSLintError jse = new JSLintError()
                {
                    Column = match.Index - lastindex, Line = lastline, Message = match.Captures[0].Value.Substring(indexOfTODO).Trim('/', '*').Replace('\n', ' ').Replace('\r', ' ').Trim()
                };
                todos.Add(jse);
            }
            return(todos);
        }
예제 #2
0
            public void ProcessData(object data)
            {
                Dictionary <string, object> dataDict = data as Dictionary <string, object>;

                if (dataDict != null)
                {
                    Action <Dictionary <string, object> > processor = (error) =>
                    {
                        JSLintError jsError = new JSLintError();
                        if (error.ContainsKey("line"))
                        {
                            if (error["line"] is int)
                            {
                                jsError.Line = (int)error["line"];
                            }
                        }

                        if (error.ContainsKey("character"))
                        {
                            if (error["character"] is int)
                            {
                                jsError.Column = ((int)error["character"]) + 1;
                            }
                        }

                        if (jsError.Column == 0)
                        {
                            jsError.Column = 1;
                        }

                        if (error.ContainsKey("reason"))
                        {
                            if (error["reason"] is string)
                            {
                                jsError.Message = (string)error["reason"];
                            }
                        }

                        if (error.ContainsKey("evidence"))
                        {
                            if (error["evidence"] is string)
                            {
                                jsError.Evidence = (string)error["evidence"];
                            }
                        }

                        _errors.Add(jsError);
                    };

                    if (dataDict.ContainsKey("errors"))
                    {
                        ProcessListOfObject(dataDict["errors"], processor);
                    }

                    if (_processUnuseds && dataDict.ContainsKey("unused"))
                    {
                        ProcessListOfObject(dataDict["unused"], (unused) =>
                        {
                            JSLintError jsError = new JSLintError();
                            if (unused.ContainsKey("line"))
                            {
                                jsError.Line = (int)unused["line"];
                            }

                            jsError.Column = 1;

                            if (unused.ContainsKey("name"))
                            {
                                jsError.Message = string.Format("Unused Variable '{0}'.", unused["name"]);
                            }

                            _errors.Add(jsError);
                        });
                    }

                    if (dataDict.ContainsKey("vsdocerr"))
                    {
                        ProcessListOfObject(dataDict["vsdocerr"], processor);
                    }
                }
            }