/// <summary>
        /// This function is the callback used to execute the command when the menu item is clicked.
        /// See the constructor to see how the menu item is associated with this function using
        /// OleMenuCommandService service and MenuCommand class.
        /// </summary>
        /// <param name="sender">Event sender.</param>
        /// <param name="e">Event args.</param>
        private void MenuItemCallback(object sender, EventArgs e)
        {
            DTE dte = (DTE)ServiceProvider.GetService(typeof(DTE));

            if (dte.ActiveDocument is null)
            {
                ShowMessage("Oops!", "Please select some text in active document.");
                return;
            }

            Indenter columnIndenter;
            string   fileExtension = Path.GetExtension(dte.ActiveDocument.FullName).ToLower().Remove(0, 1);

            switch (fileExtension)
            {
            case "cs":
                columnIndenter = new Indenter(new CSharpLanguage());
                break;

            default:
                columnIndenter = new Indenter(new BaseLanguage());
                break;
            }

            var textDocument = dte.ActiveDocument.Object() as TextDocument;

            if (textDocument is null || textDocument.Selection is null || string.IsNullOrWhiteSpace(textDocument.Selection.Text))
            {
                ShowMessage("Oops!", "Please select some text in active document.");
                return;
            }
            var selectedText = textDocument.Selection.Text;
            var editPoint    = textDocument.CreateEditPoint(textDocument.Selection.TopPoint);

            editPoint.ReplaceText(textDocument.Selection.BottomPoint, columnIndenter.Apply(selectedText), 0);
        }