Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[changelog skip] Refactor: Immutable CodeBlocks #13

Merged
merged 1 commit into from
Nov 16, 2020

Conversation

schneems
Copy link
Collaborator

To be able to have CodeBlock class not depend on knowledge of all code lines, we need to move the code expansion logic outside of the code class.

It's now being represented in the BlockExpand class which can be independently tested. To simplify writing this class, a helper class AroundBlockScan was introduced. This class automates some of the chores around searching before/after a given block.

The IndentScan class has been renamed to ParseBlocksFromIndentLine to be a little more descriptive about it's purpose and goal, but I'm still struggling to name it.

To be able to have CodeBlock class not depend on knowledge of all code lines, we need to move the code expansion logic outside of the code class.

It's now being represented in the BlockExpand class which can be independently tested. To simplify writing this class, a helper class AroundBlockScan was introduced. This class automates some of the chores around searching before/after a given block.

The IndentScan class has been renamed to ParseBlocksFromIndentLine to be a little more descriptive about it's purpose and goal, but I'm still struggling to name it.
@schneems schneems changed the title Refactor: Immutable CodeBlocks [changelog skip] Refactor: Immutable CodeBlocks Nov 16, 2020
@schneems schneems merged commit 6933248 into main Nov 16, 2020
@schneems schneems deleted the schneems/code-block-refactor branch November 18, 2020 20:24
schneems added a commit that referenced this pull request Jan 15, 2022
# This is the 1st commit message:

Move queue logic and engulf logic to a class

The queuing and engulfing logic are tied together. We can bundle the two of them into a single class with a specific interface.
# This is the commit message #2:

WIP A*ish

# This is the commit message #3:

WIP with lex_diff OMG

# This is the commit message #4:

WIP Pull out "grab equal" logic of UpDownExpand

# This is the commit message #5:

WIP move class to proper file location

# This is the commit message #6:

WIP Fix spelling of method

# This is the commit message #7:

WIP LOL search

# This is the commit message #8:

Runs, finds the large code blocks, but is too greedy

# This is the commit message #9:

Move LexDiff to own class, refactor to an array

We're never using the hash keys so we don't need them. We can save memory and time by storing the values as an array.

# This is the commit message #10:

WIP LOL spec

# This is the commit message #11:

Micro optimize lex diff

# This is the commit message #12:

UpDownExpand fix major bug with internal mutability

When calling `line.lex_detect.dup` it was duplicating the outer memory, but not the inner memory. Internally we're using an array and the old array was still being referenced and mutated.

# This is the commit message #13:

LexDiff Huge perf upgrade

Store values in the object instead of an array.

# This is the commit message #14:

WIP playing with fuzzing this into the old algorithm

# This is the commit message #15:

WORKS and is hella fast

# This is the commit message #16:

WIP docs

# This is the commit message #17:

Put a max band on number of iterations

Unbounded while loops scare me, in theory this class should never iterate more than line times, but mistakes happen. When they do I want feedback for the user without disrupting the rest of their program.

# This is the commit message #18:

WIP Cleanup and docs

# This is the commit message #19:

WIP Cleanup and docs

# This is the commit message #20:

Standardrb

# This is the commit message #21:

Standardrb

# This is the commit message #22:

Refactor LexDiff, remove unused methods, add docs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

1 participant