Sha256: 2b9e42e402594451b3f0bc58ee7bdcc66eaef1fdf4ae24e82d5d1574e746c2a6

Contents?: true

Size: 1.81 KB

Versions: 40

Compression:

Stored size: 1.81 KB

Contents

#!/usr/bin/env ruby

require "bundler/setup"
require "rbs"

Members = RBS::AST::Members

def group(member)
  case member
  when Members::Include, Members::Extend, Members::Prepend
    0
  when Members::ClassVariable
    -3
  when Members::ClassInstanceVariable
    -2
  when Members::InstanceVariable
    -1
  when Members::AttrAccessor, Members::AttrWriter, Members::AttrReader
    2
  when Members::MethodDefinition
    if member.singleton?
      if member.name == :new
        0.4
      else
        1
      end
    else
      if member.name == :initialize
        0.5
      else
        3
      end
    end
  when Members::Alias
    if member.singleton?
      1
    else
      3
    end
  when Members::Private, Members::Public
    -4
  end
end

def key(member)
  case member
  when Members::Include, Members::Extend, Members::Prepend
    member.name.to_s
  when Members::ClassVariable, Members::ClassInstanceVariable, Members::InstanceVariable
    member.name.to_s
  when Members::AttrAccessor, Members::AttrWriter, Members::AttrReader
    member.name.to_s
  when Members::MethodDefinition
    member.name.to_s
  when Members::Alias
    member.new_name.to_s
  else
    1
  end
end

ARGV.map {|f| Pathname(f) }.each do |path|
  puts "Opening #{path}..."

  buffer = RBS::Buffer.new(name: path, content: path.read)
  sigs = RBS::Parser.parse_signature(buffer)

  sigs.each do |sig|
    case sig
    when RBS::AST::Declarations::Class, RBS::AST::Declarations::Module, RBS::AST::Declarations::Interface
      sig.members.sort! do |m1, m2|
        group1 = group(m1)
        group2 = group(m2)

        if group1 == group2
          key(m1) <=> key(m2)
        else
          group1 <=> group2
        end
      end
    end
  end

  puts "Writing #{path}..."
  path.open('w') do |out|
    writer = RBS::Writer.new(out: out)
    writer.write sigs
  end
end

Version data entries

40 entries across 40 versions & 2 rubygems

Version Path
rbs-1.2.0 bin/sort
rbs-1.1.1 bin/sort
rbs-1.1.0 bin/sort
rbs-1.0.6 bin/sort
rbs-1.0.5 bin/sort
rbs-1.0.4 bin/sort
rbs-1.0.3 bin/sort
rbs-1.0.2 bin/sort
rbs-1.0.1 bin/sort
rbs-1.0.0 bin/sort
rbs-1.0.0.pre2 bin/sort
rbs-1.0.0.pre bin/sort
rbs-0.20.1 bin/sort
rbs-0.20.0 bin/sort
rbs-0.19.0 bin/sort
rbs-0.18.1 bin/sort
rbs-0.18.0 bin/sort
rbs-0.17.0 bin/sort
rbs-0.16.0 bin/sort
rbs-0.15.0 bin/sort