This script will extract deprecations using the TypeScript API.
It's not 100% reliable, but it's pretty good. There seems to be an issue where overloaded functions that have a single deprecated clause will aways report.
| # Usage: | |
| # $ npm install -g @aivenio/tsc-output-parser | |
| # $ ruby ts-expect-error.rb | |
| require 'json' | |
| def fix_errors | |
| puts "Running the TypeScript compiler to find errors..." | |
| errors = JSON.parse(`$(yarn bin tsc) --noEmit | tsc-output-parser`) | |
| changes = Hash.new { |h, k| h[k] = Set.new } |
| require 'bundler/setup' | |
| require 'rspec' | |
| $LOAD_PATH.unshift(File.join(Dir.pwd, 'spec')) | |
| ids = `grep '| failed' spec/examples.txt | sed 's/|.*//'`.lines(chomp: true).map(&:rstrip) | |
| # Require each file | |
| ids.each { |failure| require_relative failure.split('[')[0] } |
| # frozen_string_literal: true | |
| # Usage: bin/rails runner unused_routes.rb | |
| def action_exists?(controller, action) | |
| controller_class = "#{controller.camelize}Controller".constantize | |
| controller_class.public_instance_methods.include?(action.to_sym) | |
| rescue NameError | |
| false | |
| end |
| # frozen_string_literal: true | |
| source "https://rubygems.org" | |
| gem "cuprite", "~> 0.15.1" | |
| gem "sinatra", "~> 4.0" | |
| gem "puma", "~> 6.4" | |
| gem "minitest", "~> 5.24" |
| require 'bundler/inline' | |
| require 'minitest/autorun' | |
| gemfile true do | |
| source 'https://rubygems.org' | |
| gem 'activerecord', require: 'active_record' | |
| gem 'sqlite3' | |
| end | |
| ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:') |
| deprecator = ActiveSupport::Deprecation.new('in the future', 'B4B') | |
| deprecator.behavior = ActiveSupport::Deprecation.behavior | |
| ActiveSupport::Deprecation.deprecate_methods( | |
| Rails.application.routes.named_routes.path_helpers_module, | |
| :foo_path, | |
| :bar_path, | |
| deprecator: deprecator | |
| ) |
| require 'spec_helper' | |
| require 'rails' | |
| require 'action_view' | |
| require 'action_controller' | |
| require 'rspec/rails' | |
| class TestApplication < Rails::Application | |
| end | |
| RSpec.describe 'example', type: :controller do |
| require "set" | |
| require "graphql" | |
| require "json" | |
| SCHEMA_PATH = ENV.fetch("SCHEMA") do | |
| abort "Run with SCHEMA=<path-to-schema.json> and try again." | |
| end | |
| SCHEMA = JSON.parse(File.read(SCHEMA_PATH)) | |
| REFERENCES = Hash.new do |h, t| |
| # Convert your codebase to use TypedDocumentNode. It's not perfect, but | |
| # it does a pretty decent job. You'll want to review the changes manually. | |
| # Usage: ruby convert.rb [...GLOBS] | |
| # Example: ruby convert.rb "src/**/*.{ts,tsx}" | |
| require "set" | |
| def convert_import(line) | |
| parts = line.scan(/use(\w+)(Query|Mutation)/) | |
| return [line] if parts.empty? |