private static string AddScopeToSelectors(string filePath, SourceText inputSourceText, string cssScope, out IEnumerable <RazorDiagnostic> diagnostics)
        {
            var cssParser  = new DefaultParserFactory().CreateParser();
            var inputText  = inputSourceText.ToString();
            var stylesheet = cssParser.Parse(inputText, insertComments: false);

            var resultBuilder             = new StringBuilder();
            var previousInsertionPosition = 0;
            var foundDiagnostics          = new List <RazorDiagnostic>();

            var ensureNoImportsVisitor = new EnsureNoImports(filePath, inputSourceText, stylesheet, foundDiagnostics);

            ensureNoImportsVisitor.Visit();

            var scopeInsertionPositionsVisitor = new FindScopeInsertionEdits(stylesheet);

            scopeInsertionPositionsVisitor.Visit();
            foreach (var edit in scopeInsertionPositionsVisitor.Edits)
            {
                resultBuilder.Append(inputText.Substring(previousInsertionPosition, edit.Position - previousInsertionPosition));
                previousInsertionPosition = edit.Position;

                switch (edit)
                {
                case InsertSelectorScopeEdit _:
                    resultBuilder.AppendFormat(CultureInfo.InvariantCulture, "[{0}]", cssScope);
                    break;

                case InsertKeyframesNameScopeEdit _:
                    resultBuilder.AppendFormat(CultureInfo.InvariantCulture, "-{0}", cssScope);
                    break;

                case DeleteContentEdit deleteContentEdit:
                    previousInsertionPosition += deleteContentEdit.DeleteLength;
                    break;

                default:
                    throw new NotImplementedException($"Unknown edit type: '{edit}'");
                }
            }

            resultBuilder.Append(inputText.Substring(previousInsertionPosition));

            diagnostics = foundDiagnostics;
            return(resultBuilder.ToString());
        }
        // Public for tests
        public static string AddScopeToSelectors(string inputText, string cssScope)
        {
            var cssParser  = new DefaultParserFactory().CreateParser();
            var stylesheet = cssParser.Parse(inputText, insertComments: false);

            var resultBuilder             = new StringBuilder();
            var previousInsertionPosition = 0;

            var scopeInsertionPositionsVisitor = new FindScopeInsertionEdits(stylesheet);

            scopeInsertionPositionsVisitor.Visit();
            foreach (var edit in scopeInsertionPositionsVisitor.Edits)
            {
                resultBuilder.Append(inputText.Substring(previousInsertionPosition, edit.Position - previousInsertionPosition));
                previousInsertionPosition = edit.Position;

                switch (edit)
                {
                case InsertSelectorScopeEdit _:
                    resultBuilder.AppendFormat("[{0}]", cssScope);
                    break;

                case InsertKeyframesNameScopeEdit _:
                    resultBuilder.AppendFormat("-{0}", cssScope);
                    break;

                case DeleteContentEdit deleteContentEdit:
                    previousInsertionPosition += deleteContentEdit.DeleteLength;
                    break;

                default:
                    throw new NotImplementedException($"Unknown edit type: '{edit}'");
                }
            }

            resultBuilder.Append(inputText.Substring(previousInsertionPosition));

            return(resultBuilder.ToString());
        }