public override ITreeRange Format(ITreeNode firstElement, ITreeNode lastElement, CodeFormatProfile profile,
                                          AdditionalFormatterParameters parameters = null)
        {
            parameters = parameters ?? AdditionalFormatterParameters.Empty;
            var       pointer  = FormatterImplHelper.CreateRangePointer(firstElement, lastElement);
            ITreeNode lastNode = lastElement;

            var task = new FormatTask(firstElement, lastNode, profile);

            task.Adjust(this);
            if (task.FirstElement == null)
            {
                return(new TreeRange(firstElement, lastElement));
            }

            //ASSERT(!IsWhitespaceToken(lastNode), "Whitespace node on the right side of the range");

            var settings = GetFormattingSettings(task.FirstElement, parameters, myShaderLabFormattingInfo);

            settings.Settings.SetValue((key => key.WRAP_LINES), false);

            DoDeclarativeFormat(settings, myShaderLabFormattingInfo, null, new[] { task }, parameters,
                                _ => false, null, FormatChildren, false);

            return(FormatterImplHelper.PointerToRange(pointer, firstElement, lastElement));

            void FormatChildren(FormatTask formatTask, FmtSettings <ShaderLabFormatSettingsKey> formatSettings, CodeFormattingContext context)
            {
                using (var fmtProgress = parameters.ProgressIndicator.CreateSubProgress(1))
                {
                    Assertion.Assert(formatTask.FirstElement != null, "firstNode != null");
                    var file = formatTask.FirstElement.GetContainingFile();
                    if (file != null)
                    {
                        if (ShaderLabDoNotFormatInjectionsCookie.IsInjectionFormatterSuppressed)
                        {
                            return;
                        }

                        using (new SuspendInjectRegenerationCookie())
                        {
                            FormatterImplHelper.RunFormatterForGeneratedLanguages(file, formatTask.FirstElement, lastNode, profile,
                                                                                  it => true, PsiLanguageCategories.All, parameters.ChangeProgressIndicator(fmtProgress));
                        }
                    }
                }
            }
        }