{"action":"created","comment":{"url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/pulls/comments/211440329","pull_request_review_id":147860873,"id":211440329,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMTQ0MDMyOQ==","diff_hunk":"@@ -0,0 +1,1692 @@\n+﻿using System.Collections.Generic;\n+using System.Linq;\n+using System.Threading;\n+using NUnit.Framework;\n+using Rubberduck.Inspections.Concrete;\n+using Rubberduck.Parsing.Symbols;\n+using RubberduckTests.Mocks;\n+\n+namespace RubberduckTests.Grammar\n+{\n+    [TestFixture]\n+    public class AttributesTests\n+    {\n+        [Category(\"Grammar\")]\n+        [Category(\"Attributes\")]\n+        [Test]\n+        public void ModuleAttributeAtStartGetsRecognized()\n+        {\n+            const string inputCode =\n+                @\"Attribute VB_Description = \"\"Whatever\"\"\n+\n+Public bar As Long\n+\n+Public baz As String\n+\n+Public Sub Foo(ByRef arg1 As String)\n+    arg1 = \"\"test\"\"\n+End Sub\n+\n+Public Function Woo() As String\n+    Woo = \"\"test\"\"\n+End Function\n+\n+Public Property Get FooBar() As Long\n+    FooBar = 0\n+End Property\n+\n+Public Property Let FooBar(arg As Long)\n+End Property\n+\n+Public Property Set FooBaz(arg As Object)\n+    Set FooBaz = arg\n+End Property\n+\";\n+            var moduleName = \"TestModule\";\n+            var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, moduleName, out var component);\n+            var module = component.QualifiedModuleName; \n+            using (var state = MockParser.CreateAndParse(vbe.Object))\n+            {\n+                var expectedAttributeScopeCount = 1;\n+                var expectedAttributeScope = (moduleName, DeclarationType.ProceduralModule);\n+                var expectedAttributeName = \"VB_Description\";\n+                var expectedAttributeValue = @\"\"\"Whatever\"\"\";\n+\n+                var moduleAttributes = state.GetModuleAttributes(module);\n+                var moduleAttributesCount = moduleAttributes.Count;\n+                Assert.AreEqual(expectedAttributeScopeCount, moduleAttributesCount);\n+                var scopeAttributes = moduleAttributes[expectedAttributeScope];\n+                var attribute = scopeAttributes.Single();\n+                var attributeName = attribute.Name;\n+                var value = attribute.Values.Single();\n+                Assert.AreEqual(expectedAttributeName, attributeName);\n+                Assert.AreEqual(expectedAttributeValue, value);\n+            }\n+        }\n+\n+        [Category(\"Grammar\")]\n+        [Category(\"Attributes\")]\n+        [Test]\n+        public void ModuleAttributeBetweenModuleVariableDeclarationsGetsRecognized()\n+        {\n+            const string inputCode =\n+                @\"\n+\n+Public bar As Long\n+Attribute VB_Description = \"\"Whatever\"\"\n+Public baz As String\n+\n+Public Sub Foo(ByRef arg1 As String)\n+    arg1 = \"\"test\"\"\n+End Sub\n+\n+Public Function Woo() As String\n+    Woo = \"\"test\"\"\n+End Function\n+\n+Public Property Get FooBar() As Long\n+    FooBar = 0\n+End Property\n+\n+Public Property Let FooBar(arg As Long)\n+End Property\n+\n+Public Property Set FooBaz(arg As Object)\n+    Set FooBaz = arg\n+End Property\n+\";\n+            var moduleName = \"TestModule\";\n+            var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, moduleName, out var component);\n+            var module = component.QualifiedModuleName;\n+            using (var state = MockParser.CreateAndParse(vbe.Object))\n+            {\n+                var expectedAttributeScopeCount = 1;\n+                var expectedAttributeScope = (moduleName, DeclarationType.ProceduralModule);\n+                var expectedAttributeName = \"VB_Description\";\n+                var expectedAttributeValue = @\"\"\"Whatever\"\"\";\n+\n+                var moduleAttributes = state.GetModuleAttributes(module);\n+                var moduleAttributesCount = moduleAttributes.Count;\n+                Assert.AreEqual(expectedAttributeScopeCount, moduleAttributesCount);\n+                var scopeAttributes = moduleAttributes[expectedAttributeScope];\n+                var attribute = scopeAttributes.Single();\n+                var attributeName = attribute.Name;\n+                var value = attribute.Values.Single();\n+                Assert.AreEqual(expectedAttributeName, attributeName);\n+                Assert.AreEqual(expectedAttributeValue, value);\n+            }\n+        }\n+\n+        [Category(\"Grammar\")]\n+        [Category(\"Attributes\")]\n+        [Test]\n+        public void ModuleAttributeAfterModuleDeclarationsGetsRecognized()\n+        {\n+            const string inputCode =\n+                @\"\n+\n+Public bar As Long\n+\n+Public baz As String\n+Attribute VB_Description = \"\"Whatever\"\"\n+Public Sub Foo(ByRef arg1 As String)\n+    arg1 = \"\"test\"\"\n+End Sub\n+\n+Public Function Woo() As String\n+    Woo = \"\"test\"\"\n+End Function\n+\n+Public Property Get FooBar() As Long\n+    FooBar = 0\n+End Property\n+\n+Public Property Let FooBar(arg As Long)\n+End Property\n+\n+Public Property Set FooBaz(arg As Object)\n+    Set FooBaz = arg\n+End Property\n+\";\n+            var moduleName = \"TestModule\";\n+            var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, moduleName, out var component);\n+            var module = component.QualifiedModuleName;\n+            using (var state = MockParser.CreateAndParse(vbe.Object))\n+            {\n+                var expectedAttributeScopeCount = 1;\n+                var expectedAttributeScope = (moduleName, DeclarationType.ProceduralModule);\n+                var expectedAttributeName = \"VB_Description\";\n+                var expectedAttributeValue = @\"\"\"Whatever\"\"\";\n+\n+                var moduleAttributes = state.GetModuleAttributes(module);\n+                var moduleAttributesCount = moduleAttributes.Count;\n+                Assert.AreEqual(expectedAttributeScopeCount, moduleAttributesCount);\n+                var scopeAttributes = moduleAttributes[expectedAttributeScope];\n+                var attribute = scopeAttributes.Single();\n+                var attributeName = attribute.Name;\n+                var value = attribute.Values.Single();\n+                Assert.AreEqual(expectedAttributeName, attributeName);\n+                Assert.AreEqual(expectedAttributeValue, value);\n+            }\n+        }\n+\n+        [Category(\"Grammar\")]\n+        [Category(\"Attributes\")]\n+        [Test]\n+        public void ModuleAttributeInModuleBodyElementGetsRecognized()\n+        {\n+            const string inputCode =\n+                @\"\n+\n+Public bar As Long\n+\n+Public baz As String\n+\n+Public Sub Foo(ByRef arg1 As String)\n+    arg1 = \"\"test\"\"\n+End Sub\n+\n+Public Function Woo() As String\n+Attribute VB_Description = \"\"Whatever\"\"\n+    Woo = \"\"test\"\"\n+End Function\n+\n+Public Property Get FooBar() As Long\n+    FooBar = 0\n+End Property\n+\n+Public Property Let FooBar(arg As Long)\n+End Property\n+\n+Public Property Set FooBaz(arg As Object)\n+    Set FooBaz = arg\n+End Property\n+\";\n+            var moduleName = \"TestModule\";\n+            var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, moduleName, out var component);\n+            var module = component.QualifiedModuleName;\n+            using (var state = MockParser.CreateAndParse(vbe.Object))\n+            {\n+                var expectedAttributeScopeCount = 1;\n+                var expectedAttributeScope = (moduleName, DeclarationType.ProceduralModule);\n+                var expectedAttributeName = \"VB_Description\";\n+                var expectedAttributeValue = @\"\"\"Whatever\"\"\";\n+\n+                var moduleAttributes = state.GetModuleAttributes(module);\n+                var moduleAttributesCount = moduleAttributes.Count;\n+                Assert.AreEqual(expectedAttributeScopeCount, moduleAttributesCount);\n+                var scopeAttributes = moduleAttributes[expectedAttributeScope];\n+                var attribute = scopeAttributes.Single();\n+                var attributeName = attribute.Name;\n+                var value = attribute.Values.Single();\n+                Assert.AreEqual(expectedAttributeName, attributeName);\n+                Assert.AreEqual(expectedAttributeValue, value);\n+            }\n+        }\n+\n+        [Category(\"Grammar\")]\n+        [Category(\"Attributes\")]\n+        [Test]\n+        public void ModuleAttributeBetweenModuleBodyElementsGetsRecognized()\n+        {\n+            const string inputCode =\n+                @\"\n+\n+Public bar As Long\n+\n+Public baz As String\n+\n+Public Sub Foo(ByRef arg1 As String)\n+    arg1 = \"\"test\"\"\n+End Sub\n+\n+Public Function Woo() As String\n+    Woo = \"\"test\"\"\n+End Function\n+\n+Attribute VB_Description = \"\"Whatever\"\"\n+\n+Public Property Get FooBar() As Long\n+    FooBar = 0\n+End Property\n+\n+Public Property Let FooBar(arg As Long)\n+End Property\n+\n+Public Property Set FooBaz(arg As Object)\n+    Set FooBaz = arg\n+End Property\n+\";\n+            var moduleName = \"TestModule\";\n+            var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, moduleName, out var component);\n+            var module = component.QualifiedModuleName;\n+            using (var state = MockParser.CreateAndParse(vbe.Object))\n+            {\n+                var expectedAttributeScopeCount = 1;\n+                var expectedAttributeScope = (moduleName, DeclarationType.ProceduralModule);\n+                var expectedAttributeName = \"VB_Description\";\n+                var expectedAttributeValue = @\"\"\"Whatever\"\"\";\n+\n+                var moduleAttributes = state.GetModuleAttributes(module);\n+                var moduleAttributesCount = moduleAttributes.Count;\n+                Assert.AreEqual(expectedAttributeScopeCount, moduleAttributesCount);\n+                var scopeAttributes = moduleAttributes[expectedAttributeScope];\n+                var attribute = scopeAttributes.Single();\n+                var attributeName = attribute.Name;\n+                var value = attribute.Values.Single();\n+                Assert.AreEqual(expectedAttributeName, attributeName);\n+                Assert.AreEqual(expectedAttributeValue, value);\n+            }\n+        }\n+\n+        [Category(\"Grammar\")]\n+        [Category(\"Attributes\")]\n+        [Test]\n+        public void ModuleAttributeAtEndGetsRecognized()\n+        {\n+            const string inputCode =\n+                @\"\n+\n+Public bar As Long\n+\n+Public baz As String\n+\n+Public Sub Foo(ByRef arg1 As String)\n+    arg1 = \"\"test\"\"\n+End Sub\n+\n+Public Function Woo() As String\n+    Woo = \"\"test\"\"\n+End Function\n+\n+Public Property Get FooBar() As Long\n+    FooBar = 0\n+End Property\n+\n+Public Property Let FooBar(arg As Long)\n+End Property\n+\n+Public Property Set FooBaz(arg As Object)\n+    Set FooBaz = arg\n+End Property\n+\n+Attribute VB_Description = \"\"Whatever\"\"\";\n+            var moduleName = \"TestModule\";\n+            var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, moduleName, out var component);\n+            var module = component.QualifiedModuleName;\n+            using (var state = MockParser.CreateAndParse(vbe.Object))\n+            {\n+                var expectedAttributeScopeCount = 1;\n+                var expectedAttributeScope = (moduleName, DeclarationType.ProceduralModule);\n+                var expectedAttributeName = \"VB_Description\";\n+                var expectedAttributeValue = @\"\"\"Whatever\"\"\";\n+\n+                var moduleAttributes = state.GetModuleAttributes(module);\n+                var moduleAttributesCount = moduleAttributes.Count;\n+                Assert.AreEqual(expectedAttributeScopeCount, moduleAttributesCount);\n+                var scopeAttributes = moduleAttributes[expectedAttributeScope];\n+                var attribute = scopeAttributes.Single();\n+                var attributeName = attribute.Name;\n+                var value = attribute.Values.Single();\n+                Assert.AreEqual(expectedAttributeName, attributeName);\n+                Assert.AreEqual(expectedAttributeValue, value);\n+            }\n+        }\n+\n+        [Category(\"Grammar\")]\n+        [Category(\"Attributes\")]\n+        [Test]\n+        public void VariableAttributeBeforeVariableDeclarationDoesNotGetRecognized()\n+        {\n+            const string inputCode =\n+                @\"\n+\n+Public bar As Long\n+\n+Attribute baz.VB_VarDescription = \"\"Whatever\"\"\n+\n+Public baz As String\n+\n+Public Sub Foo(ByRef arg1 As String)\n+    arg1 = \"\"test\"\"\n+End Sub\n+\n+Public Function Woo() As String\n+    Woo = \"\"test\"\"\n+End Function\n+\n+Public Property Get FooBar() As Long\n+    FooBar = 0\n+End Property\n+\n+Public Property Let FooBar(arg As Long)\n+End Property\n+\n+Public Property Set FooBaz(arg As Object)\n+    Set FooBaz = arg\n+End Property\n+\";\n+            var moduleName = \"TestModule\";\n+            var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, moduleName, out var component);\n+            var module = component.QualifiedModuleName;\n+            using (var state = MockParser.CreateAndParse(vbe.Object))\n+            {\n+                var moduleAttributes = state.GetModuleAttributes(module);\n+                Assert.IsFalse(moduleAttributes.Any());\n+            }\n+        }\n+\n+        [Category(\"Grammar\")]\n+        [Category(\"Attributes\")]\n+        [Test]\n+        public void VariableAttributeBetweenVariableDeclarationsAfterTheDeclarationGetsRecognized()\n+        {\n+            const string inputCode =\n+                @\"\n+\n+Public bar As Long\n+\n+Attribute bar.VB_VarDescription = \"\"Whatever\"\"\n+\n+Public baz As String\n+\n+Public Sub Foo(ByRef arg1 As String)\n+    arg1 = \"\"test\"\"\n+End Sub\n+\n+Public Function Woo() As String\n+    Woo = \"\"test\"\"\n+End Function\n+\n+Public Property Get FooBar() As Long\n+    FooBar = 0\n+End Property\n+\n+Public Property Let FooBar(arg As Long)\n+End Property\n+\n+Public Property Set FooBaz(arg As Object)\n+    Set FooBaz = arg\n+End Property\n+\";\n+            var moduleName = \"TestModule\";\n+            var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, moduleName, out var component);\n+            var module = component.QualifiedModuleName;\n+            using (var state = MockParser.CreateAndParse(vbe.Object))\n+            {\n+                var expectedAttributeScopeCount = 1;\n+                var expectedAttributeScope = (\"bar\", DeclarationType.Variable);\n+                var expectedAttributeName = \"bar.VB_VarDescription\";\n+                var expectedAttributeValue = @\"\"\"Whatever\"\"\";\n+\n+                var moduleAttributes = state.GetModuleAttributes(module);\n+                var moduleAttributesCount = moduleAttributes.Count;\n+                Assert.AreEqual(expectedAttributeScopeCount, moduleAttributesCount);\n+                var scopeAttributes = moduleAttributes[expectedAttributeScope];\n+                var attribute = scopeAttributes.Single();\n+                var attributeName = attribute.Name;\n+                var value = attribute.Values.Single();\n+                Assert.AreEqual(expectedAttributeName, attributeName);\n+                Assert.AreEqual(expectedAttributeValue, value);\n+            }\n+        }\n+\n+        [Category(\"Grammar\")]\n+        [Category(\"Attributes\")]\n+        [Test]\n+        public void VariableAttributeBetweenVariableDeclarationsAndModuleBaodyGetsRecognized()","path":"RubberduckTests/Grammar/AttributesTests.cs","position":437,"original_position":437,"commit_id":"f77fea4f547f8cf286b6ce647f489acb31738f5f","original_commit_id":"f77fea4f547f8cf286b6ce647f489acb31738f5f","user":{"login":"bclothier","id":2367644,"node_id":"MDQ6VXNlcjIzNjc2NDQ=","avatar_url":"https://avatars2.githubusercontent.com/u/2367644?v=4","gravatar_id":"","url":"https://api.github.com/users/bclothier","html_url":"https://github.com/bclothier","followers_url":"https://api.github.com/users/bclothier/followers","following_url":"https://api.github.com/users/bclothier/following{/other_user}","gists_url":"https://api.github.com/users/bclothier/gists{/gist_id}","starred_url":"https://api.github.com/users/bclothier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bclothier/subscriptions","organizations_url":"https://api.github.com/users/bclothier/orgs","repos_url":"https://api.github.com/users/bclothier/repos","events_url":"https://api.github.com/users/bclothier/events{/privacy}","received_events_url":"https://api.github.com/users/bclothier/received_events","type":"User","site_admin":false},"body":"Typo -- `ModuleBody` rather than `ModuleBaody`","created_at":"2018-08-20T23:41:21Z","updated_at":"2018-08-20T23:55:50Z","html_url":"https://github.com/rubberduck-vba/Rubberduck/pull/4287#discussion_r211440329","pull_request_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/pulls/4287","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/rubberduck-vba/Rubberduck/pulls/comments/211440329"},"html":{"href":"https://github.com/rubberduck-vba/Rubberduck/pull/4287#discussion_r211440329"},"pull_request":{"href":"https://api.github.com/repos/rubberduck-vba/Rubberduck/pulls/4287"}}},"pull_request":{"url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/pulls/4287","id":209371571,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA5MzcxNTcx","html_url":"https://github.com/rubberduck-vba/Rubberduck/pull/4287","diff_url":"https://github.com/rubberduck-vba/Rubberduck/pull/4287.diff","patch_url":"https://github.com/rubberduck-vba/Rubberduck/pull/4287.patch","issue_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/issues/4287","number":4287,"state":"open","locked":false,"title":"Contexts allowing Attributes","user":{"login":"MDoerner","id":22868956,"node_id":"MDQ6VXNlcjIyODY4OTU2","avatar_url":"https://avatars1.githubusercontent.com/u/22868956?v=4","gravatar_id":"","url":"https://api.github.com/users/MDoerner","html_url":"https://github.com/MDoerner","followers_url":"https://api.github.com/users/MDoerner/followers","following_url":"https://api.github.com/users/MDoerner/following{/other_user}","gists_url":"https://api.github.com/users/MDoerner/gists{/gist_id}","starred_url":"https://api.github.com/users/MDoerner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MDoerner/subscriptions","organizations_url":"https://api.github.com/users/MDoerner/orgs","repos_url":"https://api.github.com/users/MDoerner/repos","events_url":"https://api.github.com/users/MDoerner/events{/privacy}","received_events_url":"https://api.github.com/users/MDoerner/received_events","type":"User","site_admin":false},"body":"This PR introduces a new field `AttributesPassContext` on the `Declaration` holding the context from the attributes pass for all declarations allowing attributes. I would like to have added this only to a more specific type. However, that would have required some rework on the declaration type hierarchy since we have no `ModuleVariableDeclaration`. (That is something for another PR at some time in the furture.)\r\n\r\nThe `membersAllowingAttributes` are acquired along with the attributes and stored in an analogous way.\r\n\r\nIn addition, this PR fixed the key assigned to attributes for module variables and for module attributes inside procedures, functions and properties. \r\n\r\nThis PR should provide the necessary foundation for an `AddAttributeCommand`. ","created_at":"2018-08-19T17:54:00Z","updated_at":"2018-08-20T23:55:50Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f1be8b284e7bccae1beb8e5ed6956f96ca183e47","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/pulls/4287/commits","review_comments_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/pulls/4287/comments","review_comment_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/issues/4287/comments","statuses_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/statuses/f77fea4f547f8cf286b6ce647f489acb31738f5f","head":{"label":"MDoerner:AttributableContexts","ref":"AttributableContexts","sha":"f77fea4f547f8cf286b6ce647f489acb31738f5f","user":{"login":"MDoerner","id":22868956,"node_id":"MDQ6VXNlcjIyODY4OTU2","avatar_url":"https://avatars1.githubusercontent.com/u/22868956?v=4","gravatar_id":"","url":"https://api.github.com/users/MDoerner","html_url":"https://github.com/MDoerner","followers_url":"https://api.github.com/users/MDoerner/followers","following_url":"https://api.github.com/users/MDoerner/following{/other_user}","gists_url":"https://api.github.com/users/MDoerner/gists{/gist_id}","starred_url":"https://api.github.com/users/MDoerner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MDoerner/subscriptions","organizations_url":"https://api.github.com/users/MDoerner/orgs","repos_url":"https://api.github.com/users/MDoerner/repos","events_url":"https://api.github.com/users/MDoerner/events{/privacy}","received_events_url":"https://api.github.com/users/MDoerner/received_events","type":"User","site_admin":false},"repo":{"id":72988410,"node_id":"MDEwOlJlcG9zaXRvcnk3Mjk4ODQxMA==","name":"Rubberduck","full_name":"MDoerner/Rubberduck","owner":{"login":"MDoerner","id":22868956,"node_id":"MDQ6VXNlcjIyODY4OTU2","avatar_url":"https://avatars1.githubusercontent.com/u/22868956?v=4","gravatar_id":"","url":"https://api.github.com/users/MDoerner","html_url":"https://github.com/MDoerner","followers_url":"https://api.github.com/users/MDoerner/followers","following_url":"https://api.github.com/users/MDoerner/following{/other_user}","gists_url":"https://api.github.com/users/MDoerner/gists{/gist_id}","starred_url":"https://api.github.com/users/MDoerner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MDoerner/subscriptions","organizations_url":"https://api.github.com/users/MDoerner/orgs","repos_url":"https://api.github.com/users/MDoerner/repos","events_url":"https://api.github.com/users/MDoerner/events{/privacy}","received_events_url":"https://api.github.com/users/MDoerner/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/MDoerner/Rubberduck","description":"Every programmer needs a rubberduck. COM add-in for the VBA IDE (VBE).","fork":true,"url":"https://api.github.com/repos/MDoerner/Rubberduck","forks_url":"https://api.github.com/repos/MDoerner/Rubberduck/forks","keys_url":"https://api.github.com/repos/MDoerner/Rubberduck/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MDoerner/Rubberduck/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MDoerner/Rubberduck/teams","hooks_url":"https://api.github.com/repos/MDoerner/Rubberduck/hooks","issue_events_url":"https://api.github.com/repos/MDoerner/Rubberduck/issues/events{/number}","events_url":"https://api.github.com/repos/MDoerner/Rubberduck/events","assignees_url":"https://api.github.com/repos/MDoerner/Rubberduck/assignees{/user}","branches_url":"https://api.github.com/repos/MDoerner/Rubberduck/branches{/branch}","tags_url":"https://api.github.com/repos/MDoerner/Rubberduck/tags","blobs_url":"https://api.github.com/repos/MDoerner/Rubberduck/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MDoerner/Rubberduck/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MDoerner/Rubberduck/git/refs{/sha}","trees_url":"https://api.github.com/repos/MDoerner/Rubberduck/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MDoerner/Rubberduck/statuses/{sha}","languages_url":"https://api.github.com/repos/MDoerner/Rubberduck/languages","stargazers_url":"https://api.github.com/repos/MDoerner/Rubberduck/stargazers","contributors_url":"https://api.github.com/repos/MDoerner/Rubberduck/contributors","subscribers_url":"https://api.github.com/repos/MDoerner/Rubberduck/subscribers","subscription_url":"https://api.github.com/repos/MDoerner/Rubberduck/subscription","commits_url":"https://api.github.com/repos/MDoerner/Rubberduck/commits{/sha}","git_commits_url":"https://api.github.com/repos/MDoerner/Rubberduck/git/commits{/sha}","comments_url":"https://api.github.com/repos/MDoerner/Rubberduck/comments{/number}","issue_comment_url":"https://api.github.com/repos/MDoerner/Rubberduck/issues/comments{/number}","contents_url":"https://api.github.com/repos/MDoerner/Rubberduck/contents/{+path}","compare_url":"https://api.github.com/repos/MDoerner/Rubberduck/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MDoerner/Rubberduck/merges","archive_url":"https://api.github.com/repos/MDoerner/Rubberduck/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MDoerner/Rubberduck/downloads","issues_url":"https://api.github.com/repos/MDoerner/Rubberduck/issues{/number}","pulls_url":"https://api.github.com/repos/MDoerner/Rubberduck/pulls{/number}","milestones_url":"https://api.github.com/repos/MDoerner/Rubberduck/milestones{/number}","notifications_url":"https://api.github.com/repos/MDoerner/Rubberduck/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MDoerner/Rubberduck/labels{/name}","releases_url":"https://api.github.com/repos/MDoerner/Rubberduck/releases{/id}","deployments_url":"https://api.github.com/repos/MDoerner/Rubberduck/deployments","created_at":"2016-11-06T12:14:03Z","updated_at":"2018-08-16T23:12:15Z","pushed_at":"2018-08-20T22:51:11Z","git_url":"git://github.com/MDoerner/Rubberduck.git","ssh_url":"git@github.com:MDoerner/Rubberduck.git","clone_url":"https://github.com/MDoerner/Rubberduck.git","svn_url":"https://github.com/MDoerner/Rubberduck","homepage":"","size":66455,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"next"}},"base":{"label":"rubberduck-vba:next","ref":"next","sha":"bfd6a95059fdeed531194e6bd29a6ef683512c2d","user":{"login":"rubberduck-vba","id":12832254,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyODMyMjU0","avatar_url":"https://avatars0.githubusercontent.com/u/12832254?v=4","gravatar_id":"","url":"https://api.github.com/users/rubberduck-vba","html_url":"https://github.com/rubberduck-vba","followers_url":"https://api.github.com/users/rubberduck-vba/followers","following_url":"https://api.github.com/users/rubberduck-vba/following{/other_user}","gists_url":"https://api.github.com/users/rubberduck-vba/gists{/gist_id}","starred_url":"https://api.github.com/users/rubberduck-vba/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rubberduck-vba/subscriptions","organizations_url":"https://api.github.com/users/rubberduck-vba/orgs","repos_url":"https://api.github.com/users/rubberduck-vba/repos","events_url":"https://api.github.com/users/rubberduck-vba/events{/privacy}","received_events_url":"https://api.github.com/users/rubberduck-vba/received_events","type":"Organization","site_admin":false},"repo":{"id":25800128,"node_id":"MDEwOlJlcG9zaXRvcnkyNTgwMDEyOA==","name":"Rubberduck","full_name":"rubberduck-vba/Rubberduck","owner":{"login":"rubberduck-vba","id":12832254,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyODMyMjU0","avatar_url":"https://avatars0.githubusercontent.com/u/12832254?v=4","gravatar_id":"","url":"https://api.github.com/users/rubberduck-vba","html_url":"https://github.com/rubberduck-vba","followers_url":"https://api.github.com/users/rubberduck-vba/followers","following_url":"https://api.github.com/users/rubberduck-vba/following{/other_user}","gists_url":"https://api.github.com/users/rubberduck-vba/gists{/gist_id}","starred_url":"https://api.github.com/users/rubberduck-vba/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rubberduck-vba/subscriptions","organizations_url":"https://api.github.com/users/rubberduck-vba/orgs","repos_url":"https://api.github.com/users/rubberduck-vba/repos","events_url":"https://api.github.com/users/rubberduck-vba/events{/privacy}","received_events_url":"https://api.github.com/users/rubberduck-vba/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rubberduck-vba/Rubberduck","description":"Every programmer needs a rubberduck. COM add-in for the VBA IDE (VBE).","fork":false,"url":"https://api.github.com/repos/rubberduck-vba/Rubberduck","forks_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/forks","keys_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/teams","hooks_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/hooks","issue_events_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/issues/events{/number}","events_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/events","assignees_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/assignees{/user}","branches_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/branches{/branch}","tags_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/tags","blobs_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/git/refs{/sha}","trees_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/statuses/{sha}","languages_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/languages","stargazers_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/stargazers","contributors_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/contributors","subscribers_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/subscribers","subscription_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/subscription","commits_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/commits{/sha}","git_commits_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/git/commits{/sha}","comments_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/comments{/number}","issue_comment_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/issues/comments{/number}","contents_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/contents/{+path}","compare_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/merges","archive_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/downloads","issues_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/issues{/number}","pulls_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/pulls{/number}","milestones_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/milestones{/number}","notifications_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/labels{/name}","releases_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/releases{/id}","deployments_url":"https://api.github.com/repos/rubberduck-vba/Rubberduck/deployments","created_at":"2014-10-27T02:35:11Z","updated_at":"2018-08-20T17:00:04Z","pushed_at":"2018-08-20T22:51:13Z","git_url":"git://github.com/rubberduck-vba/Rubberduck.git","ssh_url":"git@github.com:rubberduck-vba/Rubberduck.git","clone_url":"https://github.com/rubberduck-vba/Rubberduck.git","svn_url":"https://github.com/rubberduck-vba/Rubberduck","homepage":"","size":66694,"stargazers_count":631,"watchers_count":631,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":163,"mirror_url":null,"archived":false,"open_issues_count":726,"license":{"key":"gpl-3.0","name":"GNU General Public License v3.0","spdx_id":"GPL-3.0","url":"https://api.github.com/licenses/gpl-3.0","node_id":"MDc6TGljZW5zZTk="},"forks":163,"open_issues":726,"watchers":631,"default_branch":"next"}},"_links":{"self":{"href":"https://api.github.com/repos/rubberduck-vba/Rubberduck/pulls/4287"},"html":{"href":"https://github.com/rubberduck-vba/Rubberduck/pull/4287"},"issue":{"href":"https://api.github.com/repos/rubberduck-vba/Rubberduck/issues/4287"},"comments":{"href":"https://api.github.com/repos/rubberduck-vba/Rubberduck/issues/4287/comments"},"review_comments":{"href":"https://api.github.com/repos/rubberduck-vba/Rubberduck/pulls/4287/comments"},"review_comment":{"href":"https://api.github.com/repos/rubberduck-vba/Rubberduck/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rubberduck-vba/Rubberduck/pulls/4287/commits"},"statuses":{"href":"https://api.github.com/repos/rubberduck-vba/Rubberduck/statuses/f77fea4f547f8cf286b6ce647f489acb31738f5f"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"bclothier"}}