public sealed override async Task ComputeRefactoringsAsync(
            CodeRefactoringContext context)
        {
            var document = context.Document;
            var documentFileNameWithoutExtension =
                Path.GetFileNameWithoutExtension(document.FilePath);

            var root = await document.GetSyntaxRootAsync(context.CancellationToken)
                       .ConfigureAwait(false);

            var model = await document.GetSemanticModelAsync(context.CancellationToken)
                        .ConfigureAwait(false);

            var typesToRemove = root.GetTypesToRemove(
                model, documentFileNameWithoutExtension);

            if (typesToRemove.Length > 1)
            {
                context.RegisterRefactoring(CodeAction.Create(
                                                "Move types to files in folders",
                                                async token => await ExtractTypesToFilesCodeRefactoringProvider.CreateFiles(
                                                    document, root, model, typesToRemove,
                                                    _ => _.Replace(".", "\\"), token)));
                context.RegisterRefactoring(CodeAction.Create(
                                                "Move types to files in current folder",
                                                async token => await ExtractTypesToFilesCodeRefactoringProvider.CreateFiles(
                                                    document, root, model, typesToRemove,
                                                    _ => string.Empty, token)));
            }
        }