Ejemplo n.º 1
0
        private void Analyze(string fragment, string filename, int lineOffset = 1, int charOffset = 1)
        {
            if (String.IsNullOrWhiteSpace(fragment))
            {
                return;
            }

            try
            {
                int             firstLineOfFragment = 0;
                IncludeFileType fileType            = GetFileType(filename, fragment);

                if (fileType == IncludeFileType.CSS)
                {
                    if (!fragment.StartsWith("@charset"))
                    {
                        if (lineOffset > 1 || OptionsProviderRegistry.CurrentOptions.FakeCSSCharset)
                        {
                            fragment            = "@charset \"UTF-8\";" + "\n" + fragment;
                            firstLineOfFragment = 1;
                        }
                        else
                        {
                            WriteError(
                                "",
                                lineOffset,
                                1,
                                "CSS Files must begin @charset to be parsed by JS Lint",
                                filename);
                            return;
                        }
                    }
                }

                var ignoreErrorHandler = new IgnoreErrorSectionsHandler(fragment);

                var isJs   = fileType == IncludeFileType.JS;
                var errors = _linter.Lint(fragment, OptionsProviderRegistry.CurrentOptions.JSLintOptions, isJs);
                foreach (var error in errors)
                {
                    if (ignoreErrorHandler.IsErrorIgnored(error.Line, error.Column))
                    {
                        continue;
                    }

                    if (++_errorCount > Threshold)
                    {
                        break;
                    }

                    WriteError(
                        error.Evidence,
                        error.Line + lineOffset - (1 + firstLineOfFragment),
                        error.Line == 1 + firstLineOfFragment
                            ? error.Column + charOffset - 1
                            : error.Column,
                        error.Message,
                        filename,
                        !isJs);
                }

                if (OptionsProviderRegistry.CurrentOptions.TODOEnabled && isJs)
                {
                    var todos = TodoFinder.FindTodos(fragment);

                    foreach (var error in todos)
                    {
                        WriteToDo(
                            error.Line + lineOffset - (1 + firstLineOfFragment),
                            error.Line == 1 + firstLineOfFragment
                                ? error.Column + charOffset - 1
                                : error.Column,
                            error.Message,
                            filename);
                    }
                }
            }
            catch (Exception e)
            {
                WriteToErrorList(e.Message);
            }
        }
Ejemplo n.º 2
0
 public TodoGetController(TodoFinder finder)
 {
     Finder = finder;
 }