Sha256: 3b4582d5bb41458a8448dd92b60cdd7c16b2248244fce644529c59981c275e33

Contents?: true

Size: 1.88 KB

Versions: 3

Compression:

Stored size: 1.88 KB

Contents

#!/usr/bin/env ruby

require "ruby/signature"

Members = Ruby::Signature::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 = Ruby::Signature::Buffer.new(name: path, content: path.read)
  sigs = Ruby::Signature::Parser.parse_signature(buffer)

  sigs.each do |sig|
    case sig
    when Ruby::Signature::AST::Declarations::Class, Ruby::Signature::AST::Declarations::Module, Ruby::Signature::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 = Ruby::Signature::Writer.new(out: out)
    writer.write sigs
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
steep-0.14.0 vendor/ruby-signature/bin/sort
steep-0.13.0 vendor/ruby-signature/bin/sort
steep-0.12.0 vendor/ruby-signature/bin/sort