2018-02-27 19:42:01 +00:00
|
|
|
module Mtx
|
|
|
|
module CompilationDatabase
|
|
|
|
@file_name = "#{$build_dir}/compile_commands.json"
|
|
|
|
@compilation_commands = {}
|
|
|
|
|
|
|
|
def self.database_file_name
|
|
|
|
@file_name
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.read
|
2023-01-02 21:27:27 +00:00
|
|
|
return {} unless FileTest.exist?(@file_name)
|
2018-02-27 19:42:01 +00:00
|
|
|
|
|
|
|
Hash[
|
|
|
|
*JSON.parse(IO.readlines(@file_name).join("")).
|
|
|
|
map { |entry| [ entry["file"], entry ] }.
|
|
|
|
flatten
|
|
|
|
]
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.write
|
|
|
|
return if @compilation_commands.empty?
|
|
|
|
|
|
|
|
entries = self.read.merge(@compilation_commands).values.sort_by { |e| e["file"] }
|
|
|
|
File.open(@file_name, "w") do |f|
|
|
|
|
f.write(JSON.generate(entries, :indent => " ", :object_nl => "\n", :array_nl => "\n"))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.add entry
|
|
|
|
@compilation_commands[entry["file"]] = entry
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
at_exit { Mtx::CompilationDatabase.write }
|