{"action":"created","comment":{"url":"https://api.github.com/repos/adamdriscoll/poshtools/pulls/comments/43808782","id":43808782,"diff_hunk":"@@ -0,0 +1,576 @@\n+﻿using System;\r\n+using System.Collections.Generic;\r\n+using System.ComponentModel.Composition;\r\n+using Microsoft.VisualStudio;\r\n+using Microsoft.VisualStudio.Editor;\r\n+using Microsoft.VisualStudio.Language.Intellisense;\r\n+using Microsoft.VisualStudio.OLE.Interop;\r\n+using Microsoft.VisualStudio.Shell;\r\n+using Microsoft.VisualStudio.Text;\r\n+using Microsoft.VisualStudio.Text.Editor;\r\n+using Microsoft.VisualStudio.Text.Editor.OptionsExtensionMethods;\r\n+using Microsoft.VisualStudio.Text.Operations;\r\n+using Microsoft.VisualStudio.TextManager.Interop;\r\n+using Microsoft.VisualStudio.Utilities;\r\n+using MSXML;\r\n+\r\n+namespace PowerShellTools.Snippets\r\n+{\r\n+    [Export(typeof(IVsTextViewCreationListener))]\r\n+    [Name(\"snippets\")]\r\n+    [ContentType(\"PowerShell\")]\r\n+    [TextViewRole(PredefinedTextViewRoles.Editable)]\r\n+    public class SnippetHandlerProvider : IVsTextViewCreationListener\r\n+    {\r\n+       // internal const string LanguageServiceGuidStr = \"AD4D401C-11EA-431F-A412-FAB167156206\";\r\n+\r\n+        [Import]\r\n+        internal ITextStructureNavigatorSelectorService NavigatorService { get; set; }\r\n+\r\n+        [Import]\r\n+        internal IVsEditorAdaptersFactoryService AdapterService = null;\r\n+        [Import]\r\n+        internal ICompletionBroker CompletionBroker { get; set; }\r\n+        [Import]\r\n+        internal SVsServiceProvider ServiceProvider { get; set; }\r\n+\r\n+        public void VsTextViewCreated(IVsTextView textViewAdapter)\r\n+        {\r\n+            ITextView textView = AdapterService.GetWpfTextView(textViewAdapter);\r\n+            if (textView == null)\r\n+                return;\r\n+\r\n+            textView.Properties.GetOrCreateSingletonProperty(() => new SnippetHandler(textViewAdapter, this, AdapterService, textView));\r\n+        }\r\n+    }\r\n+\r\n+    internal class SnippetHandler : IOleCommandTarget, IVsExpansionClient\r\n+    {\r\n+        private readonly IVsTextLines _lines;\r\n+        private readonly IVsTextView _view;\r\n+        private readonly ITextView _textView;\r\n+        private readonly IVsEditorAdaptersFactoryService _adapterFactory;\r\n+        private IVsExpansionSession _session;\r\n+        private bool _sessionEnded, _selectEndSpan;\r\n+        private ITrackingPoint _selectionStart, _selectionEnd;\r\n+\r\n+        public const string SurroundsWith = \"SurroundsWith\";\r\n+        public const string SurroundsWithStatement = \"SurroundsWithStatement\";\r\n+        public const string Expansion = \"Expansion\";\r\n+\r\n+        IVsExpansionManager _mExManager;\r\n+        private readonly IOleCommandTarget _mNextCommandHandler;\r\n+        private readonly SnippetHandlerProvider _mProvider;\r\n+\r\n+        private static string[] _allStandardSnippetTypes = { Expansion, SurroundsWith };\r\n+        private static string[] _surroundsWithSnippetTypes = { SurroundsWith, SurroundsWithStatement };\r\n+\r\n+        [Import]\r\n+        internal IVsEditorAdaptersFactoryService AdapterFactory { get; set; }\r\n+\r\n+        [Import]\r\n+        internal ITextStructureNavigatorSelectorService NavigatorService { get; set; }\r\n+\r\n+        internal SnippetHandler(IVsTextView textViewAdapter, SnippetHandlerProvider provider, IVsEditorAdaptersFactoryService adaptersFactory, ITextView textView)\r\n+        {\r\n+            _adapterFactory = adaptersFactory;\r\n+            _textView = textView;\r\n+            _view = textViewAdapter;\r\n+            _mProvider = provider;\r\n+            //get the text manager from the service provider\r\n+            var textManager = (IVsTextManager2)_mProvider.ServiceProvider.GetService(typeof(SVsTextManager));\r\n+            textManager.GetExpansionManager(out _mExManager);\r\n+            _session = null;\r\n+\r\n+            //add the command to the command chain\r\n+            textViewAdapter.AddCommandFilter(this, out _mNextCommandHandler);\r\n+\r\n+            _lines = (IVsTextLines)_adapterFactory.GetBufferAdapter(_textView.TextBuffer);\r\n+        }\r\n+\r\n+        public int Exec(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)\r\n+        {\r\n+            if (VsShellUtilities.IsInAutomationFunction(_mProvider.ServiceProvider))\r\n+            {\r\n+                return _mNextCommandHandler.Exec(ref pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);\r\n+            }\r\n+\r\n+            if (pguidCmdGroup != VSConstants.VSStd2K)\r\n+                return _mNextCommandHandler.Exec(ref pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);\r\n+\r\n+            switch ((VSConstants.VSStd2KCmdID) nCmdID)\r\n+            {\r\n+                case VSConstants.VSStd2KCmdID.RETURN:\r\n+                    if (InSession && ErrorHandler.Succeeded(EndCurrentExpansion(false)))\r\n+                    {\r\n+                        return VSConstants.S_OK;\r\n+                    }\r\n+                    break;\r\n+                case VSConstants.VSStd2KCmdID.TAB:\r\n+                    if (InSession && ErrorHandler.Succeeded(NextField()))\r\n+                    {\r\n+                        return VSConstants.S_OK;\r\n+                    }\r\n+                    break;\r\n+                case VSConstants.VSStd2KCmdID.BACKTAB:\r\n+                    if (InSession && ErrorHandler.Succeeded(PreviousField()))\r\n+                    {\r\n+                        return VSConstants.S_OK;\r\n+                    }\r\n+                    break;\r\n+                case VSConstants.VSStd2KCmdID.SURROUNDWITH:\r\n+                case VSConstants.VSStd2KCmdID.INSERTSNIPPET:\r\n+                    var textManager = (IVsTextManager2)_mProvider.ServiceProvider.GetService(typeof(SVsTextManager));\r\n+                    textManager.GetExpansionManager(out _mExManager);\r\n+                    TriggerSnippet(nCmdID);\r\n+                    return VSConstants.S_OK;\r\n+            }\r\n+\r\n+            return _mNextCommandHandler.Exec(ref pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);\r\n+        }\r\n+\r\n+        private void TriggerSnippet(uint nCmdID)\r\n+        {\r\n+            if (_mExManager == null) return;\r\n+\r\n+            string prompt;\r\n+            string[] snippetTypes;\r\n+            if ((VSConstants.VSStd2KCmdID)nCmdID == VSConstants.VSStd2KCmdID.SURROUNDWITH)\r\n+            {\r\n+                prompt = \"Surround with:\";\r\n+                snippetTypes = _surroundsWithSnippetTypes;\r\n+            }\r\n+            else\r\n+            {\r\n+                prompt = \"Insert snippet:\";\r\n+                snippetTypes = _allStandardSnippetTypes;\r\n+            }\r\n+\r\n+            _mExManager.InvokeInsertionUI(\r\n+                _view,\r\n+                this,\r\n+                new Guid(GuidList.PowerShellLanguage),\r\n+                snippetTypes, \r\n+                snippetTypes.Length,\r\n+                0,\r\n+                null,\r\n+                0,\r\n+                0,\r\n+                prompt,\r\n+                \">\"\r\n+                );\r\n+        }\r\n+\r\n+        public int QueryStatus(ref Guid pguidCmdGroup, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText)\r\n+        {\r\n+            if (VsShellUtilities.IsInAutomationFunction(_mProvider.ServiceProvider))\r\n+                return _mNextCommandHandler.QueryStatus(ref pguidCmdGroup, cCmds, prgCmds, pCmdText);\r\n+\r\n+            if (pguidCmdGroup != VSConstants.VSStd2K || cCmds <= 0)\r\n+                return _mNextCommandHandler.QueryStatus(ref pguidCmdGroup, cCmds, prgCmds, pCmdText);\r\n+\r\n+            if (prgCmds[0].cmdID != (uint) VSConstants.VSStd2KCmdID.INSERTSNIPPET)\r\n+                return _mNextCommandHandler.QueryStatus(ref pguidCmdGroup, cCmds, prgCmds, pCmdText);\r\n+\r\n+            prgCmds[0].cmdf = (int)Constants.MSOCMDF_ENABLED | (int)Constants.MSOCMDF_SUPPORTED;\r\n+            return VSConstants.S_OK;\r\n+        }\r\n+\r\n+        public bool InSession\r\n+        {\r\n+            get\r\n+            {\r\n+                return _session != null;\r\n+            }\r\n+        }\r\n+\r\n+        public int EndExpansion()\r\n+        {\r\n+            _session = null;\r\n+            _sessionEnded = true;\r\n+            _selectionStart = _selectionEnd = null;\r\n+            return VSConstants.S_OK;\r\n+        }\r\n+\r\n+        public int FormatSpan(IVsTextLines pBuffer, TextSpan[] ts)\r\n+        {\r\n+            IXMLDOMNode codeNode, snippetTypes, declarations, imports;\r\n+\r\n+            int hr;\r\n+            if (ErrorHandler.Failed(hr = _session.GetSnippetNode(\"CodeSnippet:Code\", out codeNode)))\r\n+            {\r\n+                return hr;\r\n+            }\r\n+\r\n+            if (ErrorHandler.Failed(hr = _session.GetHeaderNode(\"CodeSnippet:SnippetTypes\", out snippetTypes)))\r\n+            {\r\n+                return hr;\r\n+            }\r\n+\r\n+            var declList = new List<string>();\r\n+            if (ErrorHandler.Succeeded(hr = _session.GetSnippetNode(\"CodeSnippet:Declarations\", out declarations))\r\n+                && declarations != null)\r\n+            {\r\n+                foreach (IXMLDOMNode declType in declarations.childNodes)\r\n+                {\r\n+                    var id = declType.selectSingleNode(\"./CodeSnippet:ID\");\r\n+                    if (id != null)\r\n+                    {\r\n+                        declList.Add(id.text);\r\n+                    }\r\n+                }\r\n+            }\r\n+\r\n+            var importList = new List<string>();\r\n+            if (ErrorHandler.Succeeded(hr = _session.GetSnippetNode(\"CodeSnippet:Imports\", out imports))\r\n+                && imports != null)\r\n+            {\r\n+                foreach (IXMLDOMNode import in imports.childNodes)\r\n+                {\r\n+                    var id = import.selectSingleNode(\"./CodeSnippet:Namespace\");\r\n+                    if (id != null)\r\n+                    {\r\n+                        importList.Add(id.text);\r\n+                    }\r\n+                }\r\n+            }\r\n+\r\n+            bool surroundsWith = false, surroundsWithStatement = false;\r\n+            foreach (IXMLDOMNode snippetType in snippetTypes.childNodes)\r\n+            {\r\n+                if (snippetType.nodeName == \"SnippetType\")\r\n+                {\r\n+                    if (snippetType.text == SurroundsWith)\r\n+                    {\r\n+                        surroundsWith = true;\r\n+                    }\r\n+                    else if (snippetType.text == SurroundsWithStatement)\r\n+                    {\r\n+                        surroundsWithStatement = true;\r\n+                    }\r\n+                }\r\n+            }\r\n+\r\n+            // get the indentation of where we're inserting the code...\r\n+            string baseIndentation = GetBaseIndentation(ts);\r\n+\r\n+            TextSpan? endSpan = null;\r\n+            using (var edit = _textView.TextBuffer.CreateEdit())\r\n+            {\r\n+                if (surroundsWith || surroundsWithStatement)\r","path":"PowerShellTools/Snippets/SnippetHandler.cs","position":260,"original_position":260,"commit_id":"e2fe9e6814ee1bd698c0a878c4ef68c5364bf6a2","original_commit_id":"e2fe9e6814ee1bd698c0a878c4ef68c5364bf6a2","user":{"login":"AndreSayreMSFT","id":10080679,"avatar_url":"https://avatars.githubusercontent.com/u/10080679?v=3","gravatar_id":"","url":"https://api.github.com/users/AndreSayreMSFT","html_url":"https://github.com/AndreSayreMSFT","followers_url":"https://api.github.com/users/AndreSayreMSFT/followers","following_url":"https://api.github.com/users/AndreSayreMSFT/following{/other_user}","gists_url":"https://api.github.com/users/AndreSayreMSFT/gists{/gist_id}","starred_url":"https://api.github.com/users/AndreSayreMSFT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndreSayreMSFT/subscriptions","organizations_url":"https://api.github.com/users/AndreSayreMSFT/orgs","repos_url":"https://api.github.com/users/AndreSayreMSFT/repos","events_url":"https://api.github.com/users/AndreSayreMSFT/events{/privacy}","received_events_url":"https://api.github.com/users/AndreSayreMSFT/received_events","type":"User","site_admin":false},"body":"Python and comments?","created_at":"2015-11-03T21:23:10Z","updated_at":"2015-11-03T21:23:10Z","html_url":"https://github.com/adamdriscoll/poshtools/pull/363#discussion_r43808782","pull_request_url":"https://api.github.com/repos/adamdriscoll/poshtools/pulls/363","_links":{"self":{"href":"https://api.github.com/repos/adamdriscoll/poshtools/pulls/comments/43808782"},"html":{"href":"https://github.com/adamdriscoll/poshtools/pull/363#discussion_r43808782"},"pull_request":{"href":"https://api.github.com/repos/adamdriscoll/poshtools/pulls/363"}}},"pull_request":{"url":"https://api.github.com/repos/adamdriscoll/poshtools/pulls/363","id":48094671,"html_url":"https://github.com/adamdriscoll/poshtools/pull/363","diff_url":"https://github.com/adamdriscoll/poshtools/pull/363.diff","patch_url":"https://github.com/adamdriscoll/poshtools/pull/363.patch","issue_url":"https://api.github.com/repos/adamdriscoll/poshtools/issues/363","number":363,"state":"open","locked":false,"title":"Snippets","user":{"login":"adamdriscoll","id":1256531,"avatar_url":"https://avatars.githubusercontent.com/u/1256531?v=3","gravatar_id":"","url":"https://api.github.com/users/adamdriscoll","html_url":"https://github.com/adamdriscoll","followers_url":"https://api.github.com/users/adamdriscoll/followers","following_url":"https://api.github.com/users/adamdriscoll/following{/other_user}","gists_url":"https://api.github.com/users/adamdriscoll/gists{/gist_id}","starred_url":"https://api.github.com/users/adamdriscoll/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adamdriscoll/subscriptions","organizations_url":"https://api.github.com/users/adamdriscoll/orgs","repos_url":"https://api.github.com/users/adamdriscoll/repos","events_url":"https://api.github.com/users/adamdriscoll/events{/privacy}","received_events_url":"https://api.github.com/users/adamdriscoll/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-10-19T16:29:01Z","updated_at":"2015-11-03T21:23:10Z","closed_at":null,"merged_at":null,"merge_commit_sha":"93bff0db69d2ebbab901a19d0c48a7b5ddfe08e4","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/adamdriscoll/poshtools/pulls/363/commits","review_comments_url":"https://api.github.com/repos/adamdriscoll/poshtools/pulls/363/comments","review_comment_url":"https://api.github.com/repos/adamdriscoll/poshtools/pulls/comments{/number}","comments_url":"https://api.github.com/repos/adamdriscoll/poshtools/issues/363/comments","statuses_url":"https://api.github.com/repos/adamdriscoll/poshtools/statuses/e2fe9e6814ee1bd698c0a878c4ef68c5364bf6a2","head":{"label":"adamdriscoll:snippetsv2","ref":"snippetsv2","sha":"e2fe9e6814ee1bd698c0a878c4ef68c5364bf6a2","user":{"login":"adamdriscoll","id":1256531,"avatar_url":"https://avatars.githubusercontent.com/u/1256531?v=3","gravatar_id":"","url":"https://api.github.com/users/adamdriscoll","html_url":"https://github.com/adamdriscoll","followers_url":"https://api.github.com/users/adamdriscoll/followers","following_url":"https://api.github.com/users/adamdriscoll/following{/other_user}","gists_url":"https://api.github.com/users/adamdriscoll/gists{/gist_id}","starred_url":"https://api.github.com/users/adamdriscoll/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adamdriscoll/subscriptions","organizations_url":"https://api.github.com/users/adamdriscoll/orgs","repos_url":"https://api.github.com/users/adamdriscoll/repos","events_url":"https://api.github.com/users/adamdriscoll/events{/privacy}","received_events_url":"https://api.github.com/users/adamdriscoll/received_events","type":"User","site_admin":false},"repo":{"id":8570875,"name":"poshtools","full_name":"adamdriscoll/poshtools","owner":{"login":"adamdriscoll","id":1256531,"avatar_url":"https://avatars.githubusercontent.com/u/1256531?v=3","gravatar_id":"","url":"https://api.github.com/users/adamdriscoll","html_url":"https://github.com/adamdriscoll","followers_url":"https://api.github.com/users/adamdriscoll/followers","following_url":"https://api.github.com/users/adamdriscoll/following{/other_user}","gists_url":"https://api.github.com/users/adamdriscoll/gists{/gist_id}","starred_url":"https://api.github.com/users/adamdriscoll/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adamdriscoll/subscriptions","organizations_url":"https://api.github.com/users/adamdriscoll/orgs","repos_url":"https://api.github.com/users/adamdriscoll/repos","events_url":"https://api.github.com/users/adamdriscoll/events{/privacy}","received_events_url":"https://api.github.com/users/adamdriscoll/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/adamdriscoll/poshtools","description":"PowerShell integration for Visual Studio 2013 and 2015.","fork":false,"url":"https://api.github.com/repos/adamdriscoll/poshtools","forks_url":"https://api.github.com/repos/adamdriscoll/poshtools/forks","keys_url":"https://api.github.com/repos/adamdriscoll/poshtools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/adamdriscoll/poshtools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/adamdriscoll/poshtools/teams","hooks_url":"https://api.github.com/repos/adamdriscoll/poshtools/hooks","issue_events_url":"https://api.github.com/repos/adamdriscoll/poshtools/issues/events{/number}","events_url":"https://api.github.com/repos/adamdriscoll/poshtools/events","assignees_url":"https://api.github.com/repos/adamdriscoll/poshtools/assignees{/user}","branches_url":"https://api.github.com/repos/adamdriscoll/poshtools/branches{/branch}","tags_url":"https://api.github.com/repos/adamdriscoll/poshtools/tags","blobs_url":"https://api.github.com/repos/adamdriscoll/poshtools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/adamdriscoll/poshtools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/adamdriscoll/poshtools/git/refs{/sha}","trees_url":"https://api.github.com/repos/adamdriscoll/poshtools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/adamdriscoll/poshtools/statuses/{sha}","languages_url":"https://api.github.com/repos/adamdriscoll/poshtools/languages","stargazers_url":"https://api.github.com/repos/adamdriscoll/poshtools/stargazers","contributors_url":"https://api.github.com/repos/adamdriscoll/poshtools/contributors","subscribers_url":"https://api.github.com/repos/adamdriscoll/poshtools/subscribers","subscription_url":"https://api.github.com/repos/adamdriscoll/poshtools/subscription","commits_url":"https://api.github.com/repos/adamdriscoll/poshtools/commits{/sha}","git_commits_url":"https://api.github.com/repos/adamdriscoll/poshtools/git/commits{/sha}","comments_url":"https://api.github.com/repos/adamdriscoll/poshtools/comments{/number}","issue_comment_url":"https://api.github.com/repos/adamdriscoll/poshtools/issues/comments{/number}","contents_url":"https://api.github.com/repos/adamdriscoll/poshtools/contents/{+path}","compare_url":"https://api.github.com/repos/adamdriscoll/poshtools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/adamdriscoll/poshtools/merges","archive_url":"https://api.github.com/repos/adamdriscoll/poshtools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/adamdriscoll/poshtools/downloads","issues_url":"https://api.github.com/repos/adamdriscoll/poshtools/issues{/number}","pulls_url":"https://api.github.com/repos/adamdriscoll/poshtools/pulls{/number}","milestones_url":"https://api.github.com/repos/adamdriscoll/poshtools/milestones{/number}","notifications_url":"https://api.github.com/repos/adamdriscoll/poshtools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/adamdriscoll/poshtools/labels{/name}","releases_url":"https://api.github.com/repos/adamdriscoll/poshtools/releases{/id}","created_at":"2013-03-05T02:59:17Z","updated_at":"2015-11-03T00:02:26Z","pushed_at":"2015-10-30T15:52:06Z","git_url":"git://github.com/adamdriscoll/poshtools.git","ssh_url":"git@github.com:adamdriscoll/poshtools.git","clone_url":"https://github.com/adamdriscoll/poshtools.git","svn_url":"https://github.com/adamdriscoll/poshtools","homepage":"","size":22505,"stargazers_count":384,"watchers_count":384,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":86,"mirror_url":null,"open_issues_count":100,"forks":86,"open_issues":100,"watchers":384,"default_branch":"dev"}},"base":{"label":"adamdriscoll:dev","ref":"dev","sha":"1b3c49dae7080690010669a175cbb731e2fe480b","user":{"login":"adamdriscoll","id":1256531,"avatar_url":"https://avatars.githubusercontent.com/u/1256531?v=3","gravatar_id":"","url":"https://api.github.com/users/adamdriscoll","html_url":"https://github.com/adamdriscoll","followers_url":"https://api.github.com/users/adamdriscoll/followers","following_url":"https://api.github.com/users/adamdriscoll/following{/other_user}","gists_url":"https://api.github.com/users/adamdriscoll/gists{/gist_id}","starred_url":"https://api.github.com/users/adamdriscoll/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adamdriscoll/subscriptions","organizations_url":"https://api.github.com/users/adamdriscoll/orgs","repos_url":"https://api.github.com/users/adamdriscoll/repos","events_url":"https://api.github.com/users/adamdriscoll/events{/privacy}","received_events_url":"https://api.github.com/users/adamdriscoll/received_events","type":"User","site_admin":false},"repo":{"id":8570875,"name":"poshtools","full_name":"adamdriscoll/poshtools","owner":{"login":"adamdriscoll","id":1256531,"avatar_url":"https://avatars.githubusercontent.com/u/1256531?v=3","gravatar_id":"","url":"https://api.github.com/users/adamdriscoll","html_url":"https://github.com/adamdriscoll","followers_url":"https://api.github.com/users/adamdriscoll/followers","following_url":"https://api.github.com/users/adamdriscoll/following{/other_user}","gists_url":"https://api.github.com/users/adamdriscoll/gists{/gist_id}","starred_url":"https://api.github.com/users/adamdriscoll/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adamdriscoll/subscriptions","organizations_url":"https://api.github.com/users/adamdriscoll/orgs","repos_url":"https://api.github.com/users/adamdriscoll/repos","events_url":"https://api.github.com/users/adamdriscoll/events{/privacy}","received_events_url":"https://api.github.com/users/adamdriscoll/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/adamdriscoll/poshtools","description":"PowerShell integration for Visual Studio 2013 and 2015.","fork":false,"url":"https://api.github.com/repos/adamdriscoll/poshtools","forks_url":"https://api.github.com/repos/adamdriscoll/poshtools/forks","keys_url":"https://api.github.com/repos/adamdriscoll/poshtools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/adamdriscoll/poshtools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/adamdriscoll/poshtools/teams","hooks_url":"https://api.github.com/repos/adamdriscoll/poshtools/hooks","issue_events_url":"https://api.github.com/repos/adamdriscoll/poshtools/issues/events{/number}","events_url":"https://api.github.com/repos/adamdriscoll/poshtools/events","assignees_url":"https://api.github.com/repos/adamdriscoll/poshtools/assignees{/user}","branches_url":"https://api.github.com/repos/adamdriscoll/poshtools/branches{/branch}","tags_url":"https://api.github.com/repos/adamdriscoll/poshtools/tags","blobs_url":"https://api.github.com/repos/adamdriscoll/poshtools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/adamdriscoll/poshtools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/adamdriscoll/poshtools/git/refs{/sha}","trees_url":"https://api.github.com/repos/adamdriscoll/poshtools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/adamdriscoll/poshtools/statuses/{sha}","languages_url":"https://api.github.com/repos/adamdriscoll/poshtools/languages","stargazers_url":"https://api.github.com/repos/adamdriscoll/poshtools/stargazers","contributors_url":"https://api.github.com/repos/adamdriscoll/poshtools/contributors","subscribers_url":"https://api.github.com/repos/adamdriscoll/poshtools/subscribers","subscription_url":"https://api.github.com/repos/adamdriscoll/poshtools/subscription","commits_url":"https://api.github.com/repos/adamdriscoll/poshtools/commits{/sha}","git_commits_url":"https://api.github.com/repos/adamdriscoll/poshtools/git/commits{/sha}","comments_url":"https://api.github.com/repos/adamdriscoll/poshtools/comments{/number}","issue_comment_url":"https://api.github.com/repos/adamdriscoll/poshtools/issues/comments{/number}","contents_url":"https://api.github.com/repos/adamdriscoll/poshtools/contents/{+path}","compare_url":"https://api.github.com/repos/adamdriscoll/poshtools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/adamdriscoll/poshtools/merges","archive_url":"https://api.github.com/repos/adamdriscoll/poshtools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/adamdriscoll/poshtools/downloads","issues_url":"https://api.github.com/repos/adamdriscoll/poshtools/issues{/number}","pulls_url":"https://api.github.com/repos/adamdriscoll/poshtools/pulls{/number}","milestones_url":"https://api.github.com/repos/adamdriscoll/poshtools/milestones{/number}","notifications_url":"https://api.github.com/repos/adamdriscoll/poshtools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/adamdriscoll/poshtools/labels{/name}","releases_url":"https://api.github.com/repos/adamdriscoll/poshtools/releases{/id}","created_at":"2013-03-05T02:59:17Z","updated_at":"2015-11-03T00:02:26Z","pushed_at":"2015-10-30T15:52:06Z","git_url":"git://github.com/adamdriscoll/poshtools.git","ssh_url":"git@github.com:adamdriscoll/poshtools.git","clone_url":"https://github.com/adamdriscoll/poshtools.git","svn_url":"https://github.com/adamdriscoll/poshtools","homepage":"","size":22505,"stargazers_count":384,"watchers_count":384,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":86,"mirror_url":null,"open_issues_count":100,"forks":86,"open_issues":100,"watchers":384,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/adamdriscoll/poshtools/pulls/363"},"html":{"href":"https://github.com/adamdriscoll/poshtools/pull/363"},"issue":{"href":"https://api.github.com/repos/adamdriscoll/poshtools/issues/363"},"comments":{"href":"https://api.github.com/repos/adamdriscoll/poshtools/issues/363/comments"},"review_comments":{"href":"https://api.github.com/repos/adamdriscoll/poshtools/pulls/363/comments"},"review_comment":{"href":"https://api.github.com/repos/adamdriscoll/poshtools/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/adamdriscoll/poshtools/pulls/363/commits"},"statuses":{"href":"https://api.github.com/repos/adamdriscoll/poshtools/statuses/e2fe9e6814ee1bd698c0a878c4ef68c5364bf6a2"}}}}