/// <summary>
        /// Builds a <see cref="GitHubPullRequest"/>.
        /// </summary>
        /// <param name="number">The pull request number.</param>
        /// <param name="lastCommitId">The last commit ID.</param>
        /// <param name="files">The files in the pull request.</param>
        /// <param name="diff">The full pull request unified diff.</param>
        /// <param name="branches">The <see cref="GitHubPullRequestBranches"/>.</param>
        /// <returns>A <see cref="GitHubPullRequest"/> object.</returns>
        public GitHubPullRequest Build(
            int number,
            string lastCommitId,
            IReadOnlyList<PullRequestFile> files,
            string diff,
            GitHubPullRequestBranches branches)
        {
            if (files == null)
            {
                throw new ArgumentNullException("files");
            }

            var diffs = this.parser.Split(diff);

            var pullRequestFiles =
                files.Select(
                    file =>
                    new GitHubPullRequestFile(
                        file.FileName,
                        (GitHubPullRequestFileStatus)Enum.Parse(typeof(GitHubPullRequestFileStatus), file.Status, true),
                        file.Changes,
                        diffs[file.FileName])).ToList();

            var pullRequest = new GitHubPullRequest(number, lastCommitId, pullRequestFiles, diff, branches);

            return pullRequest;
        }
        /// <summary>
        /// Creates a pull request comment.
        /// </summary>
        /// <param name="pullRequest">The <see cref="GitHubPullRequest"/> to comment on.</param>
        /// <param name="file">The <see cref="GitHubPullRequestFile"/> to comment on.</param>
        /// <param name="analyzer">The <see cref="ICodeAnalyzer"/> to use for finding violations.</param>
        /// <param name="physicalFilePath">The physical path of the file stored locally.</param>
        /// <returns>
        /// A <see cref="Task{TResult}"/> of <see cref="IEnumerable{T}"/> of <see cref="PullRequestReviewComment"/>
        /// representing the commenting operation.
        /// </returns>
        public override async Task<IEnumerable<PullRequestReviewComment>> Create(GitHubPullRequest pullRequest, GitHubPullRequestFile file, ICodeAnalyzer analyzer, string physicalFilePath)
        {
            if (pullRequest == null)
            {
                throw new ArgumentNullException("pullRequest");
            }

            if (file == null)
            {
                throw new ArgumentNullException("file");
            }

            var comments = new List<PullRequestReviewComment>();

            if (file.Changes > 0)
            {
                var comment = new PullRequestReviewCommentCreate(
                    "Renamed files not supported.",
                    pullRequest.LastCommitId,
                    file.FileName,
                    1);

                var addedComment = await this.Create(comment, pullRequest.Number);

                comments.Add(addedComment);
            }

            return comments;
        }
 /// <summary>
 /// Creates a pull request comment.
 /// </summary>
 /// <param name="pullRequest">The <see cref="GitHubPullRequest"/> to comment on.</param>
 /// <param name="file">The <see cref="GitHubPullRequestFile"/> to comment on.</param>
 /// <param name="analyzer">The <see cref="ICodeAnalyzer"/> to use for finding violations.</param>
 /// <param name="physicalFilePath">The physical path of the file stored locally.</param>
 /// <returns>
 /// A <see cref="Task{TResult}"/> of <see cref="IEnumerable{T}"/> of <see cref="PullRequestReviewComment"/>
 /// representing the commenting operation.
 /// </returns>
 public abstract Task<IEnumerable<PullRequestReviewComment>> Create(
     GitHubPullRequest pullRequest,
     GitHubPullRequestFile file,
     ICodeAnalyzer analyzer,
     string physicalFilePath);
 /// <summary>
 /// Does not do anything.
 /// </summary>
 /// <param name="pullRequest">The <see cref="GitHubPullRequest"/> to comment on.</param>
 /// <param name="file">The <see cref="GitHubPullRequestFile"/> to comment on.</param>
 /// <param name="analyzer">The <see cref="ICodeAnalyzer"/> to use for finding violations.</param>
 /// <param name="physicalFilePath">The physical path of the file stored locally.</param>
 /// <returns>
 /// A <see cref="Task{TResult}"/> of <see cref="IEnumerable{T}"/> of <see cref="PullRequestReviewComment"/>
 /// representing the commenting operation.
 /// </returns>
 /// <remarks>
 /// The result of <see cref="Task{TResult}"/> of <see cref="IEnumerable{T}"/> of <see cref="PullRequestReviewComment"/>
 /// will always be an empty enumeration.
 /// </remarks>
 public override Task<IEnumerable<PullRequestReviewComment>> Create(
     GitHubPullRequest pullRequest,
     GitHubPullRequestFile file,
     ICodeAnalyzer analyzer,
     string physicalFilePath)
 {
     using (
         var task =
             new Task<IEnumerable<PullRequestReviewComment>>(() => new List<PullRequestReviewComment>()))
     {
         task.RunSynchronously();
         return task;
     }
 }