Skip to content

Conversation

@schneems
Copy link
Collaborator

Instead of having to load all dead end code on every invocation of Ruby, we can delay requiring the files until they're actually needed (on SyntaxError).

Resolves this comment ruby/ruby#5859 (review)

This requirement makes the library a little unusual in that dead_end/version no longer defines DeadEnd::VERSION but rather a placeholder value in another constant so the gem isn't eagerly loaded when using the project's gemspec in local tests.

Instead of having to load all dead end code on every invocation of Ruby, we can delay requiring the files until they're actually needed (on SyntaxError).

Resolves this comment ruby/ruby#5859 (review)

This requirement makes the library a little unusual in that `dead_end/version` no longer defines `DeadEnd::VERSION` but rather a placeholder value in another constant so the gem isn't eagerly loaded when using the project's gemspec in local tests.
@schneems schneems force-pushed the schneems/lazy-load branch from b2b1ea6 to 70d2e43 Compare May 23, 2022 18:53
@schneems schneems marked this pull request as ready for review May 23, 2022 18:54
@schneems schneems merged commit 52c60a7 into main May 23, 2022
@schneems schneems deleted the schneems/lazy-load branch May 23, 2022 18:55
schneems added a commit to schneems/ruby that referenced this pull request May 23, 2022
```
$ tool/sync_default_gems.rb dead_end
```

Incorporates changes from these prs:

- [Breaking] Lazy load DeadEnd internals only if there is a Syntax error. Use `require "dead_end"; require "dead_end/api"` to load eagerly all internals. Otherwise `require "dead_end"` will set up an autoload for the first time the DeadEnd module is used in code. This should only happen on a syntax error. (ruby/syntax_suggest#142)
- Monkeypatch `SyntaxError#detailed_message` in Ruby 3.2+ instead of `require`, `load`, and `require_relative` (ruby/syntax_suggest#139)
schneems added a commit to schneems/ruby that referenced this pull request May 23, 2022
```
$ tool/sync_default_gems.rb dead_end
```

Incorporates changes from these prs:

- [Breaking] Lazy load DeadEnd internals only if there is a Syntax error. Use `require "dead_end"; require "dead_end/api"` to load eagerly all internals. Otherwise `require "dead_end"` will set up an autoload for the first time the DeadEnd module is used in code. This should only happen on a syntax error. (ruby/syntax_suggest#142)
- Monkeypatch `SyntaxError#detailed_message` in Ruby 3.2+ instead of `require`, `load`, and `require_relative` (ruby/syntax_suggest#139)
schneems added a commit to schneems/ruby that referenced this pull request May 24, 2022
```
$ tool/sync_default_gems.rb dead_end
```

Incorporates changes from these prs:

- [Breaking] Lazy load DeadEnd internals only if there is a Syntax error. Use `require "dead_end"; require "dead_end/api"` to load eagerly all internals. Otherwise `require "dead_end"` will set up an autoload for the first time the DeadEnd module is used in code. This should only happen on a syntax error. (ruby/syntax_suggest#142)
- Monkeypatch `SyntaxError#detailed_message` in Ruby 3.2+ instead of `require`, `load`, and `require_relative` (ruby/syntax_suggest#139)
schneems added a commit to schneems/ruby that referenced this pull request May 24, 2022
```
$ tool/sync_default_gems.rb dead_end
```

Incorporates changes from these prs:

- [Breaking] Lazy load DeadEnd internals only if there is a Syntax error. Use `require "dead_end"; require "dead_end/api"` to load eagerly all internals. Otherwise `require "dead_end"` will set up an autoload for the first time the DeadEnd module is used in code. This should only happen on a syntax error. (ruby/syntax_suggest#142)
- Monkeypatch `SyntaxError#detailed_message` in Ruby 3.2+ instead of `require`, `load`, and `require_relative` (ruby/syntax_suggest#139)
schneems added a commit to schneems/ruby that referenced this pull request Jun 4, 2022
```
$ tool/sync_default_gems.rb dead_end
```

Incorporates changes from these prs:

- [Breaking] Lazy load DeadEnd internals only if there is a Syntax error. Use `require "dead_end"; require "dead_end/api"` to load eagerly all internals. Otherwise `require "dead_end"` will set up an autoload for the first time the DeadEnd module is used in code. This should only happen on a syntax error. (ruby/syntax_suggest#142)
- Monkeypatch `SyntaxError#detailed_message` in Ruby 3.2+ instead of `require`, `load`, and `require_relative` (ruby/syntax_suggest#139)
schneems added a commit to schneems/ruby that referenced this pull request Jul 26, 2022
```
$ tool/sync_default_gems.rb dead_end
```

Incorporates changes from these prs:

- [Breaking] Lazy load DeadEnd internals only if there is a Syntax error. Use `require "dead_end"; require "dead_end/api"` to load eagerly all internals. Otherwise `require "dead_end"` will set up an autoload for the first time the DeadEnd module is used in code. This should only happen on a syntax error. (ruby/syntax_suggest#142)
- Monkeypatch `SyntaxError#detailed_message` in Ruby 3.2+ instead of `require`, `load`, and `require_relative` (ruby/syntax_suggest#139)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants