Skip to content
This repository has been archived by the owner on Mar 14, 2018. It is now read-only.

Refactored to command+argument structure #28

Merged
merged 1 commit into from
Apr 24, 2016
Merged

Refactored to command+argument structure #28

merged 1 commit into from
Apr 24, 2016

Conversation

shirshov
Copy link

@shirshov shirshov commented Apr 24, 2016

This is an attempt to introduce more modularity. Currenty
the codebase is structured around command model where
a new class is introduced for each new operation. I suggest
we change this to something better matching vim model.

Many vim commands take the following form: <operator><text_object | motion>.
For example the following commands:
caw, daw, yaw, vaw, g~aw
all perform their actions on the same text object: a word under caret
and the surrounding white space.

This commit adds a single command ChangeCommand which takes
as argument a function which in turn returns a CommandRange.
The ChangeCommand acts on this range, i.e. cuts the text and
switches the text editor to Insert mode.

I made the argument a function to underline its purpose of
being a simple calculator. It should be a pure function in
mathematical sense: doesn't change any state, doesn't have
any side effects.

Only "a block" (a(, a[, a{) and "quoted string" text objects are
implemented in this commit. No refactoring to existing commands
was performed, but this should be trivial with the new architecture.

This is an attempt to introduce more modularity. Currenty
the codebase is structured around command model where
a new class is introduced for each new operation. I suggest
we change this to something better matching vim model.

Many vim commands take the following form: <operator><text_object | motion>.
For example the following commands:
	caw, daw, yaw, vaw, g~aw
all perform their actions on the same text object: a word under caret.

This commit adds a single command ChangeCommand which takes
as argument a function which in turn returns a CommandRange.
The ChangeCommand acts on this range, i.e. cuts the text and
switches the text editor to Insert mode.

I made the argument a function to underline its purpose of
being a simple calculator. It should be a pure function in
mathematical sense: doesn't change any state, doesn't have
any side effects.

Only "a block" (a(, a[, a{) and "quoted string" text objects are
implemented in this commit. No refactoring to existing commands
was performed, but this should be trivial with the new architecture.
@hifi hifi merged commit eeee91c into hifi:master Apr 24, 2016
@hifi
Copy link
Owner

hifi commented Apr 24, 2016

Excellent refactor. Thank you!

@shirshov shirshov deleted the refactor/composability branch April 24, 2016 23:33
@hifi hifi mentioned this pull request Jun 28, 2016
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants