public string[] GetRemoteFileLines(string fullFilePath) { var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(fullFilePath); if (workspaceInfo == null) { return(null); } using (var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(workspaceInfo.ServerUri)) { if (projectCollection == null) { return(null); } projectCollection.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; try { projectCollection.EnsureAuthenticated(); } catch (TeamFoundationServerUnauthorizedException ex) { TeamCodingProjectTypeProvider.Get <ITeamCodingPackageProvider>().Logger.WriteError(ex); return(null); } var serverWorkspace = workspaceInfo.GetWorkspace(projectCollection); if (serverWorkspace == null) { return(null); } var versionControlServer = projectCollection.GetService <VersionControlServer>(); if (versionControlServer == null) { return(null); } try { if (!versionControlServer.ServerItemExists(fullFilePath, ItemType.File)) { return(null); } } catch (TeamFoundationServerUnauthorizedException ex) { TeamCodingProjectTypeProvider.Get <ITeamCodingPackageProvider>().Logger.WriteError(ex); return(null); } var serverVersion = versionControlServer.GetItem(fullFilePath); if (serverVersion.ItemType != ItemType.File) { return(null); } return(serverVersion.DownloadFile().ReadAlltext().Split(new[] { "\r\n" }, StringSplitOptions.None)); } }
private DocumentRepoMetaData.CaretInfo GetRoslynCaretInfo(SyntaxNode syntaxRoot, SnapshotPoint snapshotPoint) { var caretToken = syntaxRoot.FindToken(snapshotPoint); int[] memberHashCodes = null; IEnumerable <SyntaxNode> memberNodes = null; var desiredLeafNode = caretToken.Parent.AncestorsAndSelf().FirstOrDefault(n => n.IsUniquelyIdentifiedNode()); switch (caretToken.Language) { case "C#": case "Visual Basic": memberNodes = caretToken.Parent.AncestorsAndSelf().Reverse().TakeWhileInclusive(n => n != desiredLeafNode).ToArray(); memberHashCodes = memberNodes.Select(n => n.GetValueBasedHashCode()).ToArray(); break; default: TeamCodingProjectTypeProvider.Get <ITeamCodingPackageProvider>().Logger.WriteInformation($"Document with unsupported language found: {caretToken.Language}"); return(null); } var lastNode = memberNodes.Last(); var caretLine = snapshotPoint.GetContainingLine(); var lastNodeLine = snapshotPoint.Snapshot.GetLineFromPosition(lastNode.Span.Start); int leafMemberLineOffset = caretLine.LineNumber - lastNodeLine.LineNumber; return(new DocumentRepoMetaData.CaretInfo() { SyntaxNodeIds = memberHashCodes, LeafMemberLineOffset = leafMemberLineOffset, LeafMemberCaretOffset = snapshotPoint.Position - caretLine.Start }); }
public DocumentRepoMetaData GetRepoDocInfo(string fullFilePath) { var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(fullFilePath); if (workspaceInfo == null) { return(null); } using (var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(workspaceInfo.ServerUri)) { if (projectCollection == null) { return(null); } projectCollection.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; try { projectCollection.EnsureAuthenticated(); } catch (TeamFoundationServerUnauthorizedException ex) { TeamCodingProjectTypeProvider.Get <ITeamCodingPackageProvider>().Logger.WriteError(ex); return(null); } var serverWorkspace = workspaceInfo.GetWorkspace(projectCollection); if (serverWorkspace == null) { return(null); } var versionControlServer = projectCollection.GetService <VersionControlServer>(); if (versionControlServer == null) { return(null); } try { if (!versionControlServer.ServerItemExists(fullFilePath, ItemType.File)) { return(null); } } catch (TeamFoundationServerUnauthorizedException ex) { TeamCodingProjectTypeProvider.Get <ITeamCodingPackageProvider>().Logger.WriteError(ex); return(null); } var serverItem = serverWorkspace.GetServerItemForLocalItem(fullFilePath); var branch = versionControlServer.QueryBranchObjects(new ItemIdentifier(serverItem), RecursionType.None).FirstOrDefault()?.Properties?.RootItem?.Item; return(new DocumentRepoMetaData() { RepoProvider = nameof(TeamFoundationServiceRepository), RelativePath = serverItem, LastActioned = DateTime.UtcNow, RepoUrl = workspaceInfo.ServerUri.ToString(), RepoBranch = branch, BeingEdited = serverWorkspace.GetPendingChanges(fullFilePath).Any() }); } }