# frozen_string_literal: true require 'bundler/gem_tasks' module Bundler class GemHelper def tag_version(*) yield if block_given? end def git_push(*); end def perform_git_push(*); end end end CLEAN << '.yardoc' CLEAN << 'coverage' CLEAN << 'doc' CLEAN << 'spec/examples.txt' desc 'Run default checks' task default: %i[test lint] desc 'Run tests' task test: :spec desc 'Run code analysis tools' task lint: %i[rubocop cppcheck yard:cov] desc 'Fix code style (rubocop --auto-correct)' task fix: 'rubocop:auto_correct' begin require 'rspec/core/rake_task' RSpec::Core::RakeTask.new rescue LoadError nil end begin require 'rubocop/rake_task' RuboCop::RakeTask.new rescue LoadError nil end begin require 'yard' YARD::Rake::YardocTask.new rescue LoadError nil end begin require 'rake/extensiontask' Rake::ExtensionTask.new 'default' do |ext| ext.lib_dir = 'lib/kernaux' end rescue LoadError nil end desc 'Open development console' task :console do sh 'bundle', 'exec', File.expand_path(File.join('bin', 'console'), __dir__) end desc 'Run cppcheck' task :cppcheck do sh( 'cppcheck', '--quiet', '--error-exitcode=1', '--std=c99', '--enable=warning,style,performance,portability', __dir__, ) end namespace :yard do desc 'Measure documentation coverage' task :cov do result = `bundle exec yard stats`.lines.last.strip.freeze m = result.match(/\A(\d+(\.\d+)?)% documented\z/) raise 'Invalid result' if m.nil? coverage = m[1].to_f.round(2) puts "Documentation coverage: #{coverage}%" raise 'Not fully documented!' if coverage != 100 end end