Beispiel #1
0
        private void AnalyzeProjectItems(ProjectItems projItems, out bool reachedTreshold)
        {
            var currentOptions = OptionsProviderRegistry.CurrentOptions;

            reachedTreshold = false;
            for (int i = 1; i <= projItems.Count; i++)
            {
                ProjectItem     item     = projItems.Item(i);
                var             filename = GetFileName(item);
                IncludeFileType fileType = GetFileType(filename);

                if (fileType == IncludeFileType.Folder) // folder
                {
                    AnalyzeProjectItems(item.ProjectItems, out reachedTreshold);
                }
                else if ((currentOptions.BuildFileTypes & fileType) > 0 &&
                         item.FileCount == 1 &&
                         !IsNodeSkipped(item))
                {
                    ClearErrors(filename);
                    AnalyzeFile(filename, out reachedTreshold);
                }

                if (reachedTreshold)
                {
                    break;
                }
            }
        }
Beispiel #2
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);
            }
        }