Skip to content

Instantly share code, notes, and snippets.

@asterite
Created October 31, 2017 12:11
Show Gist options
  • Save asterite/3715161c55fa3f7322ada6fc4e2de86c to your computer and use it in GitHub Desktop.
Save asterite/3715161c55fa3f7322ada6fc4e2de86c to your computer and use it in GitHub Desktop.
Refactoring in Crystal
class Foo
def foo(x)
# Rename this call from "bar" to "baz":
# What other things change in this file?
#
# According to what's called, Bar#bar needs
# to change. But what about Baz#bar? I can
# also pass Baz.new to Foo.new.foo. There's
# no way to tell if that should be renamed too.
#
# Renaming based on usage isn't correct. The
# only solution to this is to make all methods
# have mandatory argument types, and return
# types. Then you'll know for sure what needs
# to be renamed.
x.bar(1)
end
end
class Bar
def bar(x)
end
end
class Baz
def bar(x)
end
end
Foo.new.foo(Bar.new)
@faustinoaq
Copy link

Well, I guess I can add at least basic rename support 👍 , see: crystal-lang-tools/scry#101 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment