Class: Danger::DangerMention

Inherits:
Plugin
  • Object
show all
Defined in:
lib/danger_plugin.rb

Overview

Automatically mention potential reviewers on pull requests. It downloads and parses the blame information of changed files to figure out who may be a good reviewer.

Examples:

Running plugin with reviewers count specified


# Find maximum two reviewers
mention.run(2, [], [])

Running plugin with some files blacklisted


# Find reviewers without parsing blame information
# from files matching to 'Pods/*'
mention.run(2, ["Pods/*"], [])

Running plugin with some users blacklisted


# Find reviewers ignoring users 'wojteklu' and 'danger'
mention.run(2, [], ["wojteklu", "danger"])

Instance Method Summary collapse

Instance Method Details

#run(max_reviewers = 3, file_blacklist = [], user_blacklist = []) ⇒ void

This method returns an undefined value.

Mention potential reviewers.

Parameters:

  • max_reviewers (Integer) (defaults to: 3)

    Maximum number of people to ping in the PR message, default is 3.

  • file_blacklist (Array<String>) (defaults to: [])

    Regexes of ignored files.

  • user_blacklist (Array<String>) (defaults to: [])

    List of users that will never be mentioned.



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/danger_plugin.rb', line 40

def run(max_reviewers = 3, file_blacklist = [], user_blacklist = [])
  files = select_files(file_blacklist)
  return if files.empty?

  authors = {}
  compose_urls(files).each do |url|
    result = parse_blame(url)
    authors.merge!(result) { |_, m, n| m + n }
  end

  reviewers = find_reviewers(authors, user_blacklist, max_reviewers)

  if reviewers.count > 0
    reviewers = reviewers.map { |r| '@' + r }

    result = format('By analyzing the blame information on this pull '\
    'request, we identified %s to be potential reviewer%s.',
                    reviewers.join(', '), reviewers.count > 1 ? 's' : '')

    markdown result
  end
end