Exemplo n.º 1
0
        public override IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
        {
            if (!context.Solution.HasUnityReference())
            {
                yield break;
            }

            var project = context.GetProject();

            if (project != null && !project.IsUnityProject())
            {
                yield break;
            }

            // We could check for C# here, like InRazorCSharpProject, but we only really support C# Unity projects
            // Are there any other types?
            yield return(new InUnityCSharpProject());

            var folders = GetFoldersFromProjectFolder(context) ?? GetFoldersFromPath(context);

            if (folders == null || folders.IsEmpty())
            {
                yield break;
            }

            var rootFolder = folders[folders.Count - 1];

            if (rootFolder.Equals(ProjectExtensions.AssetsFolder, StringComparison.OrdinalIgnoreCase))
            {
                yield return(new InUnityCSharpAssetsFolder());

                var isFirstpass = IsFirstpass(folders);
                var isEditor    = folders.Any(f => f.Equals("Editor", StringComparison.OrdinalIgnoreCase));

                if (isFirstpass)
                {
                    yield return(new InUnityCSharpFirstpassFolder());

                    if (isEditor)
                    {
                        yield return(new InUnityCSharpFirstpassEditorFolder());
                    }
                    if (!isEditor)
                    {
                        yield return(new InUnityCSharpFirstpassRuntimeFolder());
                    }
                }
                else
                {
                    if (isEditor)
                    {
                        yield return(new InUnityCSharpEditorFolder());
                    }
                    if (!isEditor)
                    {
                        yield return(new InUnityCSharpRuntimeFolder());
                    }
                }
            }
        }
        protected override void DoTest(IProject testProject)
        {
            var caretPosition = GetCaretPosition();

            using (ITextControl textControl = OpenTextControl(testProject, caretPosition))
            {
                var caretOffset = textControl.Caret.Offset();
                var context     = new TemplateAcceptanceContext(
                    testProject.GetSolution(),
                    textControl.Document,
                    caretOffset,
                    new TextRange(caretOffset));

                base.ExecuteWithGold(
                    sb =>
                {
                    var sp = new CSharpExtendedScopeProvider();
                    foreach (string templateScopePoint in sp.ProvideScopePoints(context))
                    {
                        sb.Write(templateScopePoint);
                        sb.WriteLine();
                    }
                });
            }
        }
Exemplo n.º 3
0
        public override IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
        {
            var sourceFile = context.SourceFile;

            if (sourceFile == null)
            {
                yield break;
            }

            var caretOffset = context.CaretOffset;
            var prefix      = LiveTemplatesManager.GetPrefix(caretOffset);

            var documentOffset = caretOffset - prefix.Length;

            if (!documentOffset.IsValid())
            {
                yield break;
            }

            var file = sourceFile.GetPsiFile <ShaderLabLanguage>(documentOffset);

            if (file == null || !file.Language.Is <ShaderLabLanguage>())
            {
                yield break;
            }

            yield return(new InUnityShaderLabFile());
        }
Exemplo n.º 4
0
 public IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
 {
     if (context.ProjectFile != null && context.ProjectFile.Name.EndsWith(".ts", StringComparison.InvariantCultureIgnoreCase))
     {
         var scopePoint = new InFileWithMask("*.ts");
         return(new[] { new DelegatingScopePoint(scopePoint, context.Document, context.CaretOffset) });
     }
     return(EmptyList <ITemplateScopePoint> .InstanceList);
 }
        public override IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
        {
            IProject project = context.GetProject();

            if (project != null && project.IsProjectReferencingNancyRazorViewEngine())
            {
                yield return(new InAnyRazorProject());
            }
        }
 public IEnumerable<ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
 {
     if (context.ProjectFile != null && context.ProjectFile.Name.EndsWith(".ts", StringComparison.InvariantCultureIgnoreCase))
     {
         var scopePoint = new InFileWithMask("*.ts");
         return new[] { new ReplacingAllowedPrefixCharsScopePoint(scopePoint, context.Document, context.CaretOffset, JsAllowedPrefixes.Chars) };
     }
     return EmptyList<ITemplateScopePoint>.InstanceList;
 }
 public override IEnumerable<ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
 {
     IProject project = context.GetProject();
     if (project != null && project.IsProjectReferencingNancyRazorViewEngine())
     {
         ProjectLanguage lang = project.ProjectProperties.DefaultLanguage;
         if (lang == ProjectLanguage.CSHARP)
             yield return new InRazorCSharpProject();
     }
 }
        public override IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
        {
            IProject project = context.GetProject();

            if (project != null && project.IsProjectReferencingNancyRazorViewEngine())
            {
                ProjectLanguage lang = project.ProjectProperties.DefaultLanguage;
                if (lang == ProjectLanguage.CSHARP)
                {
                    yield return(new InRazorCSharpProject());
                }
            }
        }
Exemplo n.º 9
0
        public override IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
        {
            var project = context.GetProject();

            if (project != null && !project.IsGodotProject())
            {
                yield break;
            }

            // We could check for C# here, like InRazorCSharpProject, but we only really support C# Godot projects
            // Are there any other types?
            yield return(new InGodotCSharpProject());
        }
        public override IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
        {
            if (!context.GetProject().IsUnityProject())
            {
                yield break;
            }

            var sourceFile = context.SourceFile;

            if (sourceFile == null)
            {
                yield break;
            }

            var caretOffset    = context.CaretOffset;
            var prefix         = LiveTemplatesManager.GetPrefix(caretOffset);
            var documentOffset = caretOffset - prefix.Length;

            if (!documentOffset.IsValid())
            {
                yield break;
            }

            var psiFile = sourceFile.GetPrimaryPsiFile();

            if (psiFile == null)
            {
                yield break;
            }

            if (psiFile.Language.Is <CSharpLanguage>())
            {
                yield return(new MustBeInUnityCSharpFile());
            }

            var element         = psiFile.FindTokenAt(caretOffset - prefix.Length);
            var typeDeclaration = element?.GetContainingNode <ITypeDeclaration>();

            var unityApi = context.Solution.GetComponent <UnityApi>();

            if (unityApi.IsUnityType(typeDeclaration?.DeclaredElement))
            {
                yield return(new MustBeInUnityType());

                yield return(new MustBeInUnitySerializableType());
            }
            else if (unityApi.IsSerializableTypeDeclaration(typeDeclaration?.DeclaredElement))
            {
                yield return(new MustBeInUnitySerializableType());
            }
        }
Exemplo n.º 11
0
        public override IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
        {
            var sourceFile = context.SourceFile;

            if (sourceFile == null)
            {
                yield break;
            }

            if (sourceFile.PrimaryPsiLanguage.Is <JsonLanguage>() && IsAsmDefFile(sourceFile))
            {
                yield return(new InAnyLanguageFile());
            }
        }
Exemplo n.º 12
0
        protected override bool AddLookupItems(CSharpCodeCompletionContext context, GroupedItemsCollector collector)
        {
            Log.Info("Add lookupitems");

            var solution = context.PsiModule.GetSolution();

            if (solution == null)
            {
                return(false);
            }

            var ltgConfig = Shell.Instance.GetComponent <LtgConfigWatcher>();

            var iconManager = solution.GetComponent <PsiIconManager>();
            var provider    = solution.GetComponent <CSharpExtendedScopeProvider>();
            var textControl = context.BasicContext.TextControl;

            var offset          = textControl.Caret.Offset();
            var templateContext = new TemplateAcceptanceContext(
                solution,
                textControl.Document,
                offset,
                new TextRange(offset));

            var scopePoints = provider.ProvideScopePoints(templateContext);

            if (ltgConfig.Tree != null)
            {
                var template = new Template("", "", "", true, true, false, TemplateApplicability.Live)
                {
                    UID = Guid.NewGuid()
                };
                var scopes = scopePoints.ToList();
                Log.Trace("Current scopes: {0}", string.Join(",", scopes));

                if (scopes.Any(scopename => ltgConfig.Tree.IsScopeExist(scopename)))
                {
                    var iconId = iconManager.ExtendToTypicalSize(ServicesThemedIcons.LiveTemplate.Id);
                    collector.Add(new ZenSharpLookupItem(template, ltgConfig.Tree, scopes, iconId));
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            Log.Warn("Lookup item for completion is not added, because ZenSharp expand tree is not loaded.");
            return(false);
        }
        public override IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
        {
            if (!context.GetProject().IsUnityProject())
            {
                yield break;
            }

            var sourceFile = context.SourceFile;

            if (sourceFile == null)
            {
                yield break;
            }

            var caretOffset    = context.CaretOffset;
            var prefix         = LiveTemplatesManager.GetPrefix(caretOffset);
            var documentOffset = caretOffset - prefix.Length;

            if (!documentOffset.IsValid())
            {
                yield break;
            }

            var psiFile         = sourceFile.GetPrimaryPsiFile();
            var element         = psiFile?.FindTokenAt(caretOffset - prefix.Length);
            var typeDeclaration = element?.GetContainingNode <ITypeDeclaration>();

            if (typeDeclaration == null)
            {
                var siblingNode = element?.GetNextMeaningfulSibling();
                while (siblingNode is IAttributeList)
                {
                    siblingNode = element.GetNextMeaningfulSibling();
                }
                if (siblingNode is IClassDeclaration)
                {
                    yield return(new IsAvailableForClassAttribute());
                }
                yield break;
            }

            var unityApi = context.Solution.GetComponent <UnityApi>();

            if (unityApi.IsUnityType(typeDeclaration.DeclaredElement))
            {
                yield return(new MustBeInUnityType());
            }
        }
        public IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
        {
            if (!context.Solution.HasUnityReference())
            {
                yield break;
            }

            var project = context.GetProject();
            var version = project != null
                ? context.Solution.GetComponent <UnityVersion>().GetActualVersion(project)
                : context.Solution.GetComponent <UnityVersion>().ActualVersionForSolution.Value;

            if (version.Major != 0)
            {
                yield return(new MustBeInProjectWithUnityVersion(version));
            }
        }
Exemplo n.º 15
0
        private List <string> GetFoldersFromProjectFolder(TemplateAcceptanceContext context)
        {
            var projectFolder = context.GetProjectFolder();

            if (projectFolder == null)
            {
                return(null);
            }

            var folders = new List <string>();

            while (projectFolder?.Path?.ShortName != null)
            {
                folders.Add(projectFolder.Path.ShortName);
                projectFolder = projectFolder.ParentFolder;
            }
            return(folders);
        }
 protected override void DoTest(Lifetime lifetime, IProject testProject)
 {
     var textControl = OpenTextControl(lifetime);
     {
         var context = new TemplateAcceptanceContext(testProject.GetSolution(),
                                                     textControl.Caret.DocumentOffset(), textControl.Selection.OneDocumentRangeWithCaret());
         ExecuteWithGold(textControl.Document, sb =>
         {
             foreach (var point in CreateScopeProvider().ProvideScopePoints(context))
             {
                 sb.Write(point.ToString());
                 if (point.Prefix != null)
                 {
                     sb.Write(" - prefix: '{0}'", point.Prefix);
                 }
                 sb.WriteLine();
             }
         });
     }
 }
Exemplo n.º 17
0
        public IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
        {
            if (!context.Solution.IsUnitySolution())
            {
                yield break;
            }

            var project = context.GetProject();

            if (project != null && !project.IsUnityProject())
            {
                yield break;
            }

            var version = context.Solution.GetComponent <UnityVersion>().GetActualVersion(project);

            if (version.Major != 0)
            {
                yield return(new MustBeInProjectWithUnityVersion(version));
            }
        }
Exemplo n.º 18
0
        private List <string> GetFoldersFromPath(TemplateAcceptanceContext context)
        {
            if (context.Location == null)
            {
                return(null);
            }

            var folders     = new List <string>();
            var currentPath = context.Location;

            while (!currentPath.IsEmpty)
            {
                var folder = currentPath.Name;
                folders.Add(folder);
                if (folder == ProjectExtensions.AssetsFolder)
                {
                    break;
                }
                currentPath = currentPath.Parent;
            }
            return(folders);
        }
        protected override void DoTest(IProject testProject)
        {
            var caretPosition = GetCaretPosition();
            using (ITextControl textControl = OpenTextControl(testProject, caretPosition))
            {
                var caretOffset = textControl.Caret.Offset();
                var context = new TemplateAcceptanceContext(
                    testProject.GetSolution(),
                    textControl.Document,
                    caretOffset,
                    new TextRange(caretOffset));

                base.ExecuteWithGold(
                    sb =>
                    {
                        var sp = new CSharpExtendedScopeProvider();
                        foreach (string templateScopePoint in sp.ProvideScopePoints(context))
                        {
                            sb.Write(templateScopePoint);
                            sb.WriteLine();
                        }
                    });
            }
        }
 public IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
 {
     return(from scopePoint in javaScriptScopeProvider.ProvideScopePoints(context)
            select(ITemplateScopePoint) new DelegatingScopePoint(scopePoint, context.Document, context.CaretOffset));
 }
        public override IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
        {
            if (!context.Solution.HasUnityReference())
            {
                yield break;
            }

            var project = context.GetProject();

            if (project != null && !project.IsUnityProject())
            {
                yield break;
            }

            // TODO: This returns the C# Unity project scope even if there's no project!
            // E.g. current context is a folder under Assets or Packages that isn't part of a PSI project
            yield return(new InUnityCSharpProject());

            var folders = GetFoldersFromProjectFolder(context) ?? GetFoldersFromPath(context);

            if (folders == null || folders.IsEmpty())
            {
                yield break;
            }

            // TODO: Review all scope points
            // See JetBrains/resharper-unity#1922

            var rootFolder = folders[folders.Count - 1];

            if (rootFolder.Equals(ProjectExtensions.AssetsFolder, StringComparison.OrdinalIgnoreCase))
            {
                yield return(new InUnityCSharpAssetsFolder());

                var isFirstpass = IsFirstpass(folders);
                var isEditor    = folders.Any(f => f.Equals("Editor", StringComparison.OrdinalIgnoreCase));

                if (isFirstpass)
                {
                    yield return(new InUnityCSharpFirstpassFolder());

                    if (isEditor)
                    {
                        yield return(new InUnityCSharpFirstpassEditorFolder());
                    }
                    else
                    {
                        yield return(new InUnityCSharpFirstpassRuntimeFolder());
                    }
                }
                else
                {
                    if (isEditor)
                    {
                        yield return(new InUnityCSharpEditorFolder());
                    }
                    else
                    {
                        yield return(new InUnityCSharpRuntimeFolder());
                    }
                }
            }
        }
 public override IEnumerable<ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
 {
     IProject project = context.GetProject();
     if (project != null && project.IsProjectReferencingNancyRazorViewEngine())
         yield return new InAnyRazorProject();
 }
 public override IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
 {
     yield break;
 }
 public IEnumerable<ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
 {
     return from scopePoint in javaScriptScopeProvider.ProvideScopePoints(context)
            select (ITemplateScopePoint)new DelegatingScopePoint(scopePoint, context.Document, context.CaretOffset);
 }
Exemplo n.º 25
0
        public override IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
        {
            var project = context.GetProject();

            if (project == null)
            {
                yield break;
            }

            if (!project.IsUnityProject())
            {
                yield break;
            }

            // We could check for C# here, like InRazorCSharpProject, but we only really support C# Unity projects
            // Are there any other types?
            yield return(new InUnityCSharpProject());

            var projectFolder = context.GetProjectFolder();

            if (projectFolder != null)
            {
                var folders = new List <string>();
                while (projectFolder?.Path?.ShortName != null)
                {
                    folders.Add(projectFolder.Path.ShortName);
                    projectFolder = projectFolder.ParentFolder;
                }

                if (folders.Count > 0)
                {
                    var rootFolder = folders[folders.Count - 1];
                    if (rootFolder.Equals("Assets", StringComparison.OrdinalIgnoreCase))
                    {
                        yield return(new InUnityCSharpAssetsFolder());

                        var isFirstpass = IsFirstpass(folders);
                        var isEditor    = folders.Any(f => f.Equals("Editor", StringComparison.OrdinalIgnoreCase));

                        if (isFirstpass)
                        {
                            yield return(new InUnityCSharpFirstpassFolder());

                            if (isEditor)
                            {
                                yield return(new InUnityCSharpFirstpassEditorFolder());
                            }
                            if (!isEditor)
                            {
                                yield return(new InUnityCSharpFirstpassRuntimeFolder());
                            }
                        }
                        else
                        {
                            if (isEditor)
                            {
                                yield return(new InUnityCSharpEditorFolder());
                            }
                            if (!isEditor)
                            {
                                yield return(new InUnityCSharpRuntimeFolder());
                            }
                        }
                    }
                }
            }
        }
 public override IEnumerable<ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
 {
     yield break;
 }
 public IEnumerable <ITemplateScopePoint> ProvideScopePoints(TemplateAcceptanceContext context)
 {
     return(from scopePoint in originalScopeProvider.ProvideScopePoints(context)
            select(ITemplateScopePoint) new ReplacingAllowedPrefixCharsScopePoint(scopePoint, context.Document, context.CaretOffset, JsAllowedPrefixes.Chars));
 }
        /// <summary>
        ///     Too lazy to implement full ITemplateScopePoint
        /// </summary>
        public IEnumerable <string> ProvideScopePoints(TemplateAcceptanceContext tacContext)
        {
            var solution = tacContext.Solution;
            var document = tacContext.SelectionRange.Document;

            if (document == null)
            {
                yield break;
            }
            var psiSource = tacContext.SourceFile;

            if (psiSource == null)
            {
                yield break;
            }

            using (ReadLockCookie.Create())
            {
                var psiFiles = solution.GetPsiServices().Files;
                if (!psiFiles.AllDocumentsAreCommitted)
                {
                    psiFiles.CommitAllDocuments();
                }
                int    caretOffset   = tacContext.CaretOffset.Offset;
                string prefix        = LiveTemplatesManager.GetPrefix(document, caretOffset);
                var    documentRange = new DocumentRange(document, caretOffset - prefix.Length);
                if (!documentRange.IsValid())
                {
                    yield break;
                }

                yield return(psiSource.PrimaryPsiLanguage.Name);

                var file = psiSource.GetPsiFile <CSharpLanguage>(documentRange);
                if (file == null || !Equals(file.Language, CSharpLanguage.Instance))
                {
                    yield break;
                }
                var element = file.FindTokenAt(document, caretOffset - prefix.Length);
                if (element == null)
                {
                    yield break;
                }

                yield return("InCSharpFile");

                var treeNode = element;

                if (treeNode.GetContainingNode <IDocCommentNode>(true) != null)
                {
                    yield break;
                }

                if (treeNode is ICSharpCommentNode || treeNode is IPreprocessorDirective)
                {
                    treeNode = treeNode.PrevSibling;
                }
                if (treeNode == null)
                {
                    yield break;
                }

                var context = CSharpReparseContext.FindContext(treeNode);
                if (context == null)
                {
                    yield break;
                }

                if (treeNode.GetContainingNode <IEnumDeclaration>() != null)
                {
                    yield return("InCSharpEnum");
                }

                var containingType = treeNode.GetContainingNode <ICSharpTypeDeclaration>(true);
                if (containingType == null && TestNode <ICSharpNamespaceDeclaration>(context, "namespace N {}", false))
                {
                    yield return("InCSharpTypeAndNamespace");
                }
                else if (TestNode <IMethodDeclaration>(context, "void foo() {}", false))
                {
                    yield return("InCSharpTypeMember");

                    // Extend here:
                    // Already in type member,
                    if (treeNode.GetContainingNode <IInterfaceDeclaration>() != null)
                    {
                        yield return("InCSharpInterface");
                    }
                    if (treeNode.GetContainingNode <IClassDeclaration>() != null)
                    {
                        yield return("InCSharpClass");
                    }
                    if (treeNode.GetContainingNode <IStructDeclaration>() != null)
                    {
                        yield return("InCSharpStruct");
                    }
                }
                else
                {
                    bool acceptsExpression = TestNode <IPostfixOperatorExpression>(context, "a++", true);
                    if (TestNode <IBreakStatement>(context, "break;", false))
                    {
                        yield return("InCSharpStatement");
                    }
                    else if (acceptsExpression)
                    {
                        yield return("InCSharpExpression");
                    }
                    if (!acceptsExpression && TestNode <IQuerySelectClause>(context, "select x", false))
                    {
                        yield return("InCSharpQuery");
                    }
                }
            }
        }