{"action":"created","comment":{"url":"https://api.github.com/repos/apple/swift/pulls/comments/166716054","pull_request_review_id":94824366,"id":166716054,"diff_hunk":"@@ -202,3 +218,225 @@ OutputFilesComputer::deriveOutputFileFromParts(StringRef dir,\n   llvm::sys::path::replace_extension(path, Suffix);\n   return path.str();\n }\n+\n+SupplementaryOutputPathsComputer::SupplementaryOutputPathsComputer(\n+    const ArgList &args, DiagnosticEngine &diags,\n+    const FrontendInputsAndOutputs &inputsAndOutputs,\n+    ArrayRef<std::string> outputFiles, StringRef moduleName)\n+    : Args(args), Diags(diags), InputsAndOutputs(inputsAndOutputs),\n+      OutputFiles(outputFiles), ModuleName(moduleName),\n+      RequestedAction(\n+          ArgsToFrontendOptionsConverter::determineRequestedAction(Args)) {}\n+\n+Optional<SupplementaryOutputPaths>\n+SupplementaryOutputPathsComputer::computeOutputPaths() const {\n+  Optional<std::vector<SupplementaryOutputPaths>> pathsFromUser =\n+      getSupplementaryOutputPathsFromArguments();\n+  if (!pathsFromUser)\n+    return None;\n+\n+  return computeOutputPathsForOneInput(\n+      OutputFiles[0], (*pathsFromUser)[0],\n+      InputsAndOutputs.firstInputProducingOutput());\n+}\n+\n+Optional<std::vector<SupplementaryOutputPaths>>\n+SupplementaryOutputPathsComputer::getSupplementaryOutputPathsFromArguments()\n+    const {\n+\n+  auto objCHeaderOutput = getSupplementaryFilenamesFromArguments(\n+      options::OPT_emit_objc_header_path);\n+  auto moduleOutput =\n+      getSupplementaryFilenamesFromArguments(options::OPT_emit_module_path);\n+  auto moduleDocOutput =\n+      getSupplementaryFilenamesFromArguments(options::OPT_emit_module_doc_path);\n+  auto dependenciesFile = getSupplementaryFilenamesFromArguments(\n+      options::OPT_emit_dependencies_path);\n+  auto referenceDependenciesFile = getSupplementaryFilenamesFromArguments(\n+      options::OPT_emit_reference_dependencies_path);\n+  auto serializedDiagnostics = getSupplementaryFilenamesFromArguments(\n+      options::OPT_serialize_diagnostics_path);\n+  auto loadedModuleTrace = getSupplementaryFilenamesFromArguments(\n+      options::OPT_emit_loaded_module_trace_path);\n+  auto TBD = getSupplementaryFilenamesFromArguments(options::OPT_emit_tbd_path);\n+\n+  if (!objCHeaderOutput || !moduleOutput || !moduleDocOutput ||\n+      !dependenciesFile || !referenceDependenciesFile ||\n+      !serializedDiagnostics || !loadedModuleTrace || !TBD) {\n+    return None;\n+  }\n+  std::vector<SupplementaryOutputPaths> result;\n+\n+  const unsigned N =\n+      InputsAndOutputs.countOfFilesProducingSupplementaryOutput();\n+  for (unsigned i = 0; i < N; ++i) {\n+    SupplementaryOutputPaths sop;\n+    sop.ObjCHeaderOutputPath = (*objCHeaderOutput)[i];\n+    sop.ModuleOutputPath = (*moduleOutput)[i];\n+    sop.ModuleDocOutputPath = (*moduleDocOutput)[i];\n+    sop.DependenciesFilePath = (*dependenciesFile)[i];\n+    sop.ReferenceDependenciesFilePath = (*referenceDependenciesFile)[i];\n+    sop.SerializedDiagnosticsPath = (*serializedDiagnostics)[i];\n+    sop.LoadedModuleTracePath = (*loadedModuleTrace)[i];\n+    sop.TBDPath = (*TBD)[i];\n+\n+    result.push_back(sop);\n+  }\n+  return result;\n+}\n+\n+// Extend this routine for filelists if/when we have them.\n+\n+Optional<std::vector<std::string>>\n+SupplementaryOutputPathsComputer::getSupplementaryFilenamesFromArguments(\n+    options::ID pathID) const {\n+  std::vector<std::string> paths = Args.getAllArgValues(pathID);\n+\n+  const unsigned N =\n+      InputsAndOutputs.countOfFilesProducingSupplementaryOutput();\n+  if (paths.size() > 0 && paths.size() != N) {\n+    Diags.diagnose(SourceLoc(), diag::error_wrong_number_of_arguments,\n+                   Args.getLastArg(pathID)->getOption().getName(), N,\n+                   paths.size());\n+    return None;\n+  }\n+  while (paths.size() < N)\n+    paths.push_back(std::string());\n+  return paths;\n+}\n+\n+Optional<SupplementaryOutputPaths>\n+SupplementaryOutputPathsComputer::computeOutputPathsForOneInput(\n+    StringRef outputFile, const SupplementaryOutputPaths &pathsFromArguments,\n+    const InputFile &input) const {\n+  StringRef defaultSupplementaryOutputPathExcludingExtension =\n+      deriveDefaultSupplementaryOutputPathExcludingExtension(outputFile, input);\n+\n+  using namespace options;\n+\n+  auto dependenciesFilePath = determineSupplementaryOutputFilename(\n+      OPT_emit_dependencies, pathsFromArguments.DependenciesFilePath, \"d\", \"\",\n+      defaultSupplementaryOutputPathExcludingExtension);\n+  if (!dependenciesFilePath)\n+    return None;\n+\n+  auto referenceDependenciesFilePath = determineSupplementaryOutputFilename(\n+      OPT_emit_reference_dependencies,\n+      pathsFromArguments.ReferenceDependenciesFilePath, \"swiftdeps\", \"\",\n+      defaultSupplementaryOutputPathExcludingExtension);\n+  if (!referenceDependenciesFilePath)\n+    return None;\n+\n+  auto serializedDiagnosticsPath = determineSupplementaryOutputFilename(\n+      OPT_serialize_diagnostics, pathsFromArguments.SerializedDiagnosticsPath,\n+      \"dia\", \"\", defaultSupplementaryOutputPathExcludingExtension);\n+\n+  if (!serializedDiagnosticsPath)\n+    return None;\n+\n+  auto objcHeaderOutputPath = determineSupplementaryOutputFilename(\n+      OPT_emit_objc_header, pathsFromArguments.ObjCHeaderOutputPath, \"h\", \"\",\n+      defaultSupplementaryOutputPathExcludingExtension);\n+  if (!objcHeaderOutputPath)\n+    return None;\n+\n+  auto loadedModuleTracePath = determineSupplementaryOutputFilename(\n+      OPT_emit_loaded_module_trace, pathsFromArguments.LoadedModuleTracePath,\n+      \"trace.json\", \"\", defaultSupplementaryOutputPathExcludingExtension);\n+  if (!loadedModuleTracePath)\n+    return None;\n+\n+  auto tbdPath = determineSupplementaryOutputFilename(\n+      OPT_emit_tbd, pathsFromArguments.TBDPath, \"tbd\", \"\",\n+      defaultSupplementaryOutputPathExcludingExtension);\n+  if (!tbdPath)\n+    return None;\n+\n+  auto moduleDocOutputPath = determineSupplementaryOutputFilename(\n+      OPT_emit_module_doc, pathsFromArguments.ModuleDocOutputPath,\n+      SERIALIZED_MODULE_DOC_EXTENSION, \"\",\n+      defaultSupplementaryOutputPathExcludingExtension);\n+  if (!moduleDocOutputPath)\n+    return None;\n+\n+  ID emitModuleOption;\n+  std::string moduleExtension;\n+  std::string mainOutputIfUsableForModule;\n+  deriveModulePathParameters(emitModuleOption, moduleExtension,\n+                             mainOutputIfUsableForModule);\n+\n+  auto moduleOutputPath = determineSupplementaryOutputFilename(\n+      emitModuleOption, pathsFromArguments.ModuleOutputPath, moduleExtension,\n+      mainOutputIfUsableForModule,\n+      defaultSupplementaryOutputPathExcludingExtension);\n+  if (!moduleOutputPath)\n+    return None;\n+\n+  SupplementaryOutputPaths sop;\n+  sop.ObjCHeaderOutputPath = *objcHeaderOutputPath;\n+  sop.ModuleOutputPath = *moduleOutputPath;\n+  sop.ModuleDocOutputPath = *moduleDocOutputPath;\n+  sop.DependenciesFilePath = *dependenciesFilePath;\n+  sop.ReferenceDependenciesFilePath = *referenceDependenciesFilePath;\n+  sop.SerializedDiagnosticsPath = *serializedDiagnosticsPath;\n+  sop.LoadedModuleTracePath = *loadedModuleTracePath;\n+  sop.TBDPath = *tbdPath;\n+  return sop;\n+}\n+\n+StringRef SupplementaryOutputPathsComputer::\n+    deriveDefaultSupplementaryOutputPathExcludingExtension(\n+        StringRef outputFilename, const InputFile &input) const {\n+  // Put the serialized diagnostics file next to the output file if possible.\n+  if (!outputFilename.empty() && outputFilename != \"-\")\n+    return outputFilename;\n+\n+  if (input.isPrimary() && input.file() != \"-\")\n+    return llvm::sys::path::filename(input.file());\n+\n+  return ModuleName;\n+}\n+\n+Optional<std::string>\n+SupplementaryOutputPathsComputer::determineSupplementaryOutputFilename(\n+    options::ID emitOpt, std::string pathFromArguments, StringRef extension,\n+    StringRef mainOutputIfUsable,\n+    StringRef defaultSupplementaryOutputPathExcludingExtension) const {\n+  using namespace options;\n+\n+  if (!pathFromArguments.empty())\n+    return pathFromArguments;\n+\n+  if (!Args.hasArg(emitOpt))\n+    return std::string();","path":"lib/Frontend/ArgsToFrontendOutputsConverter.cpp","position":218,"original_position":233,"commit_id":"e32afe8fa852e440fd9efc8dc865a05bdd06a7f0","original_commit_id":"b2b052e88f1b5cde10cf6bffd5421e349b0b9a46","user":{"login":"davidungar","id":461264,"avatar_url":"https://avatars1.githubusercontent.com/u/461264?v=4","gravatar_id":"","url":"https://api.github.com/users/davidungar","html_url":"https://github.com/davidungar","followers_url":"https://api.github.com/users/davidungar/followers","following_url":"https://api.github.com/users/davidungar/following{/other_user}","gists_url":"https://api.github.com/users/davidungar/gists{/gist_id}","starred_url":"https://api.github.com/users/davidungar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidungar/subscriptions","organizations_url":"https://api.github.com/users/davidungar/orgs","repos_url":"https://api.github.com/users/davidungar/repos","events_url":"https://api.github.com/users/davidungar/events{/privacy}","received_events_url":"https://api.github.com/users/davidungar/received_events","type":"User","site_admin":false},"body":"std::string() is correct, but the code was unclear because it was using None for error. However,\r\nthere is no error condition in this version. So, I modified this function and its caller to just return a string, instead of an optional. And, I added a Doxygen comment. (The optional may come back in a future PR, but I'll comment it if so.)","created_at":"2018-02-07T18:46:29Z","updated_at":"2018-02-07T18:46:29Z","html_url":"https://github.com/apple/swift/pull/14402#discussion_r166716054","pull_request_url":"https://api.github.com/repos/apple/swift/pulls/14402","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/apple/swift/pulls/comments/166716054"},"html":{"href":"https://github.com/apple/swift/pull/14402#discussion_r166716054"},"pull_request":{"href":"https://api.github.com/repos/apple/swift/pulls/14402"}},"in_reply_to_id":166687852},"pull_request":{"url":"https://api.github.com/repos/apple/swift/pulls/14402","id":166990912,"html_url":"https://github.com/apple/swift/pull/14402","diff_url":"https://github.com/apple/swift/pull/14402.diff","patch_url":"https://github.com/apple/swift/pull/14402.patch","issue_url":"https://api.github.com/repos/apple/swift/issues/14402","number":14402,"state":"open","locked":false,"title":"[Batch Mode] Move supplementary output paths into a dedicated structure in FrontendInputsAndOutputs (3)","user":{"login":"davidungar","id":461264,"avatar_url":"https://avatars1.githubusercontent.com/u/461264?v=4","gravatar_id":"","url":"https://api.github.com/users/davidungar","html_url":"https://github.com/davidungar","followers_url":"https://api.github.com/users/davidungar/followers","following_url":"https://api.github.com/users/davidungar/following{/other_user}","gists_url":"https://api.github.com/users/davidungar/gists{/gist_id}","starred_url":"https://api.github.com/users/davidungar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidungar/subscriptions","organizations_url":"https://api.github.com/users/davidungar/orgs","repos_url":"https://api.github.com/users/davidungar/repos","events_url":"https://api.github.com/users/davidungar/events{/privacy}","received_events_url":"https://api.github.com/users/davidungar/received_events","type":"User","site_admin":false},"body":"<!-- What's in this pull request? -->\r\nIn preparation for many sets of supplementary outputs, reify the set, and move it into FrontendInputsAndOutputs. Also move the computation of those.\r\n\r\n<!-- If this pull request resolves any bugs in the Swift bug tracker, provide a link: -->\r\n\r\n\r\n<!--\r\nBefore merging this pull request, you must run the Swift continuous integration tests.\r\nFor information about triggering CI builds via @swift-ci, see:\r\nhttps://github.com/apple/swift/blob/master/docs/ContinuousIntegration.md#swift-ci\r\n\r\nThank you for your contribution to Swift!\r\n-->","created_at":"2018-02-04T02:13:20Z","updated_at":"2018-02-07T18:46:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"89198f40ed3d698d7b45cf58048432c91cde2692","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"milestone":null,"commits_url":"https://api.github.com/repos/apple/swift/pulls/14402/commits","review_comments_url":"https://api.github.com/repos/apple/swift/pulls/14402/comments","review_comment_url":"https://api.github.com/repos/apple/swift/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apple/swift/issues/14402/comments","statuses_url":"https://api.github.com/repos/apple/swift/statuses/e32afe8fa852e440fd9efc8dc865a05bdd06a7f0","head":{"label":"davidungar:PR-18-5a-SupplementaryOutputs","ref":"PR-18-5a-SupplementaryOutputs","sha":"e32afe8fa852e440fd9efc8dc865a05bdd06a7f0","user":{"login":"davidungar","id":461264,"avatar_url":"https://avatars1.githubusercontent.com/u/461264?v=4","gravatar_id":"","url":"https://api.github.com/users/davidungar","html_url":"https://github.com/davidungar","followers_url":"https://api.github.com/users/davidungar/followers","following_url":"https://api.github.com/users/davidungar/following{/other_user}","gists_url":"https://api.github.com/users/davidungar/gists{/gist_id}","starred_url":"https://api.github.com/users/davidungar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidungar/subscriptions","organizations_url":"https://api.github.com/users/davidungar/orgs","repos_url":"https://api.github.com/users/davidungar/repos","events_url":"https://api.github.com/users/davidungar/events{/privacy}","received_events_url":"https://api.github.com/users/davidungar/received_events","type":"User","site_admin":false},"repo":{"id":100639829,"name":"swift","full_name":"davidungar/swift","owner":{"login":"davidungar","id":461264,"avatar_url":"https://avatars1.githubusercontent.com/u/461264?v=4","gravatar_id":"","url":"https://api.github.com/users/davidungar","html_url":"https://github.com/davidungar","followers_url":"https://api.github.com/users/davidungar/followers","following_url":"https://api.github.com/users/davidungar/following{/other_user}","gists_url":"https://api.github.com/users/davidungar/gists{/gist_id}","starred_url":"https://api.github.com/users/davidungar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidungar/subscriptions","organizations_url":"https://api.github.com/users/davidungar/orgs","repos_url":"https://api.github.com/users/davidungar/repos","events_url":"https://api.github.com/users/davidungar/events{/privacy}","received_events_url":"https://api.github.com/users/davidungar/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/davidungar/swift","description":"The Swift Programming Language","fork":true,"url":"https://api.github.com/repos/davidungar/swift","forks_url":"https://api.github.com/repos/davidungar/swift/forks","keys_url":"https://api.github.com/repos/davidungar/swift/keys{/key_id}","collaborators_url":"https://api.github.com/repos/davidungar/swift/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/davidungar/swift/teams","hooks_url":"https://api.github.com/repos/davidungar/swift/hooks","issue_events_url":"https://api.github.com/repos/davidungar/swift/issues/events{/number}","events_url":"https://api.github.com/repos/davidungar/swift/events","assignees_url":"https://api.github.com/repos/davidungar/swift/assignees{/user}","branches_url":"https://api.github.com/repos/davidungar/swift/branches{/branch}","tags_url":"https://api.github.com/repos/davidungar/swift/tags","blobs_url":"https://api.github.com/repos/davidungar/swift/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/davidungar/swift/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/davidungar/swift/git/refs{/sha}","trees_url":"https://api.github.com/repos/davidungar/swift/git/trees{/sha}","statuses_url":"https://api.github.com/repos/davidungar/swift/statuses/{sha}","languages_url":"https://api.github.com/repos/davidungar/swift/languages","stargazers_url":"https://api.github.com/repos/davidungar/swift/stargazers","contributors_url":"https://api.github.com/repos/davidungar/swift/contributors","subscribers_url":"https://api.github.com/repos/davidungar/swift/subscribers","subscription_url":"https://api.github.com/repos/davidungar/swift/subscription","commits_url":"https://api.github.com/repos/davidungar/swift/commits{/sha}","git_commits_url":"https://api.github.com/repos/davidungar/swift/git/commits{/sha}","comments_url":"https://api.github.com/repos/davidungar/swift/comments{/number}","issue_comment_url":"https://api.github.com/repos/davidungar/swift/issues/comments{/number}","contents_url":"https://api.github.com/repos/davidungar/swift/contents/{+path}","compare_url":"https://api.github.com/repos/davidungar/swift/compare/{base}...{head}","merges_url":"https://api.github.com/repos/davidungar/swift/merges","archive_url":"https://api.github.com/repos/davidungar/swift/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/davidungar/swift/downloads","issues_url":"https://api.github.com/repos/davidungar/swift/issues{/number}","pulls_url":"https://api.github.com/repos/davidungar/swift/pulls{/number}","milestones_url":"https://api.github.com/repos/davidungar/swift/milestones{/number}","notifications_url":"https://api.github.com/repos/davidungar/swift/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/davidungar/swift/labels{/name}","releases_url":"https://api.github.com/repos/davidungar/swift/releases{/id}","deployments_url":"https://api.github.com/repos/davidungar/swift/deployments","created_at":"2017-08-17T19:50:47Z","updated_at":"2017-08-17T19:51:19Z","pushed_at":"2018-02-07T18:44:35Z","git_url":"git://github.com/davidungar/swift.git","ssh_url":"git@github.com:davidungar/swift.git","clone_url":"https://github.com/davidungar/swift.git","svn_url":"https://github.com/davidungar/swift","homepage":"https://swift.org/","size":262734,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"apple:master","ref":"master","sha":"0a129fff248becd8a214fce427a4566cd42e35dd","user":{"login":"apple","id":10639145,"avatar_url":"https://avatars0.githubusercontent.com/u/10639145?v=4","gravatar_id":"","url":"https://api.github.com/users/apple","html_url":"https://github.com/apple","followers_url":"https://api.github.com/users/apple/followers","following_url":"https://api.github.com/users/apple/following{/other_user}","gists_url":"https://api.github.com/users/apple/gists{/gist_id}","starred_url":"https://api.github.com/users/apple/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apple/subscriptions","organizations_url":"https://api.github.com/users/apple/orgs","repos_url":"https://api.github.com/users/apple/repos","events_url":"https://api.github.com/users/apple/events{/privacy}","received_events_url":"https://api.github.com/users/apple/received_events","type":"Organization","site_admin":false},"repo":{"id":44838949,"name":"swift","full_name":"apple/swift","owner":{"login":"apple","id":10639145,"avatar_url":"https://avatars0.githubusercontent.com/u/10639145?v=4","gravatar_id":"","url":"https://api.github.com/users/apple","html_url":"https://github.com/apple","followers_url":"https://api.github.com/users/apple/followers","following_url":"https://api.github.com/users/apple/following{/other_user}","gists_url":"https://api.github.com/users/apple/gists{/gist_id}","starred_url":"https://api.github.com/users/apple/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apple/subscriptions","organizations_url":"https://api.github.com/users/apple/orgs","repos_url":"https://api.github.com/users/apple/repos","events_url":"https://api.github.com/users/apple/events{/privacy}","received_events_url":"https://api.github.com/users/apple/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/apple/swift","description":"The Swift Programming Language","fork":false,"url":"https://api.github.com/repos/apple/swift","forks_url":"https://api.github.com/repos/apple/swift/forks","keys_url":"https://api.github.com/repos/apple/swift/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apple/swift/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apple/swift/teams","hooks_url":"https://api.github.com/repos/apple/swift/hooks","issue_events_url":"https://api.github.com/repos/apple/swift/issues/events{/number}","events_url":"https://api.github.com/repos/apple/swift/events","assignees_url":"https://api.github.com/repos/apple/swift/assignees{/user}","branches_url":"https://api.github.com/repos/apple/swift/branches{/branch}","tags_url":"https://api.github.com/repos/apple/swift/tags","blobs_url":"https://api.github.com/repos/apple/swift/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apple/swift/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apple/swift/git/refs{/sha}","trees_url":"https://api.github.com/repos/apple/swift/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apple/swift/statuses/{sha}","languages_url":"https://api.github.com/repos/apple/swift/languages","stargazers_url":"https://api.github.com/repos/apple/swift/stargazers","contributors_url":"https://api.github.com/repos/apple/swift/contributors","subscribers_url":"https://api.github.com/repos/apple/swift/subscribers","subscription_url":"https://api.github.com/repos/apple/swift/subscription","commits_url":"https://api.github.com/repos/apple/swift/commits{/sha}","git_commits_url":"https://api.github.com/repos/apple/swift/git/commits{/sha}","comments_url":"https://api.github.com/repos/apple/swift/comments{/number}","issue_comment_url":"https://api.github.com/repos/apple/swift/issues/comments{/number}","contents_url":"https://api.github.com/repos/apple/swift/contents/{+path}","compare_url":"https://api.github.com/repos/apple/swift/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apple/swift/merges","archive_url":"https://api.github.com/repos/apple/swift/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apple/swift/downloads","issues_url":"https://api.github.com/repos/apple/swift/issues{/number}","pulls_url":"https://api.github.com/repos/apple/swift/pulls{/number}","milestones_url":"https://api.github.com/repos/apple/swift/milestones{/number}","notifications_url":"https://api.github.com/repos/apple/swift/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apple/swift/labels{/name}","releases_url":"https://api.github.com/repos/apple/swift/releases{/id}","deployments_url":"https://api.github.com/repos/apple/swift/deployments","created_at":"2015-10-23T21:15:07Z","updated_at":"2018-02-07T18:44:22Z","pushed_at":"2018-02-07T18:44:38Z","git_url":"git://github.com/apple/swift.git","ssh_url":"git@github.com:apple/swift.git","clone_url":"https://github.com/apple/swift.git","svn_url":"https://github.com/apple/swift","homepage":"https://swift.org/","size":261721,"stargazers_count":42549,"watchers_count":42549,"language":"C++","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":6678,"mirror_url":null,"archived":false,"open_issues_count":265,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":6678,"open_issues":265,"watchers":42549,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apple/swift/pulls/14402"},"html":{"href":"https://github.com/apple/swift/pull/14402"},"issue":{"href":"https://api.github.com/repos/apple/swift/issues/14402"},"comments":{"href":"https://api.github.com/repos/apple/swift/issues/14402/comments"},"review_comments":{"href":"https://api.github.com/repos/apple/swift/pulls/14402/comments"},"review_comment":{"href":"https://api.github.com/repos/apple/swift/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apple/swift/pulls/14402/commits"},"statuses":{"href":"https://api.github.com/repos/apple/swift/statuses/e32afe8fa852e440fd9efc8dc865a05bdd06a7f0"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"davidungar"}}