Class: Dependabot::Nuget::FileParser::ProjectFileParser

Inherits:
Object
  • Object
show all
Defined in:
lib/dependabot/nuget/file_parser/project_file_parser.rb

Constant Summary collapse

DEPENDENCY_SELECTOR =
"ItemGroup > PackageReference, " \
"ItemGroup > GlobalPackageReference, " \
"ItemGroup > PackageVersion, " \
"ItemGroup > Dependency, " \
"ItemGroup > DevelopmentDependency"
PROJECT_SDK_REGEX =
%r{^([^/]+)/(\d+(?:[.]\d+(?:[.]\d+)?)?(?:[+-].*)?)$}
PROPERTY_REGEX =
/\$\((?<property>.*?)\)/
ITEM_REGEX =
/\@\((?<property>.*?)\)/

Instance Method Summary collapse

Constructor Details

#initialize(dependency_files:) ⇒ ProjectFileParser

Returns a new instance of ProjectFileParser.



27
28
29
# File 'lib/dependabot/nuget/file_parser/project_file_parser.rb', line 27

def initialize(dependency_files:)
  @dependency_files = dependency_files
end

Instance Method Details

#dependency_set(project_file:) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/dependabot/nuget/file_parser/project_file_parser.rb', line 31

def dependency_set(project_file:)
  dependency_set = Dependabot::FileParsers::Base::DependencySet.new

  doc = Nokogiri::XML(project_file.content)
  doc.remove_namespaces!
  # Look for regular package references
  doc.css(DEPENDENCY_SELECTOR).each do |dependency_node|
    name = dependency_name(dependency_node, project_file)
    req = dependency_requirement(dependency_node, project_file)
    version = dependency_version(dependency_node, project_file)
    prop_name = req_property_name(dependency_node)
    is_dev = dependency_node.name == "DevelopmentDependency"

    dependency = build_dependency(name, req, version, prop_name, project_file, dev: is_dev)
    dependency_set << dependency if dependency
  end

  # Look for SDK references; see:
  # https://docs.microsoft.com/en-us/visualstudio/msbuild/how-to-use-project-sdk
  add_sdk_references(doc, dependency_set, project_file)

  dependency_set
end