public override Task RegisterRefactoringsAsync(MSBuildRefactoringContext context)
        {
            if (context.SelectedSpan.Length == 0)
            {
                return(Task.CompletedTask);
            }

            ExpressionNode expr = GetExpressionExtractionContext(context, out string exprStr, out int exprOffset);

            if (expr == null)
            {
                return(Task.CompletedTask);
            }

            var span = GetValidExtractionSpan(context.SelectedSpan, expr);

            if (!(span is TextSpan s))
            {
                return(Task.CompletedTask);
            }
            exprStr = exprStr.Substring(s.Start - exprOffset, s.Length);

            bool isFirst = true;

            foreach (var pt in GetExtractionPoints(context))
            {
                context.RegisterRefactoring(new ExtractExpressionAction(exprStr, s, "MyNewProperty", isFirst? null: pt.scopeName, pt.span, pt.create));
                isFirst = false;
            }

            return(Task.CompletedTask);
        }
        public override Task RegisterRefactoringsAsync(MSBuildRefactoringContext context)
        {
            if (context.SelectedSpan.Length > 0)
            {
                return(Task.CompletedTask);
            }

            XElement element;

            switch (context.ElementSyntax?.SyntaxKind)
            {
            case MSBuildSyntaxKind.Item:
                element = context.XObject.SelfAndParentsOfType <XElement> ().First();
                break;

            case MSBuildSyntaxKind.Metadata:
                element = context.XObject.SelfAndParentsOfType <XElement> ().Skip(1).First();
                break;

            case MSBuildSyntaxKind.Property:
                element = context.XObject.SelfAndParentsOfType <XElement> ().First();
                break;

            default:
                return(Task.CompletedTask);
            }

            var      group           = (XElement)element.Parent;
            XElement previousElement = null;

            foreach (var c in group.Elements)
            {
                if (c == element)
                {
                    break;
                }
                previousElement = c;
            }

            if (previousElement == null)
            {
                return(Task.CompletedTask);
            }

            //check name is cased correctly
            var groupName = MSBuildElementSyntax.Get(group.Name.FullName)?.Name;

            context.RegisterRefactoring(new SplitGroupAction(previousElement, groupName));

            return(Task.CompletedTask);
        }
Beispiel #3
0
        public override Task RegisterRefactoringsAsync(MSBuildRefactoringContext context)
        {
            if (context.SelectedSpan.Length > 0)
            {
                return(Task.CompletedTask);
            }

            XElement itemElement;

            switch (context.ElementSyntax?.SyntaxKind)
            {
            case MSBuildSyntaxKind.Item:
                itemElement = context.XObject.SelfAndParentsOfType <XElement> ().First();
                break;

            case MSBuildSyntaxKind.Metadata:
                itemElement = context.XObject.SelfAndParentsOfType <XElement> ().Skip(1).First();
                break;

            default:
                return(Task.CompletedTask);
            }

            // check it isn't in an ItemDefinitionGroup
            if (!(itemElement?.Parent is XElement pe && pe.NameEquals("ItemGroup", true)))
            {
                return(Task.CompletedTask);
            }

            if (!IsTransformable(itemElement))
            {
                return(Task.CompletedTask);
            }

            context.RegisterRefactoring(new UseAttributeForMetadataAction(itemElement));

            return(Task.CompletedTask);
        }