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

Lazyload DeadEnd internals on syntax error #142

Merged
merged 1 commit into from
May 23, 2022
Merged

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 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
Development

Successfully merging this pull request may close these issues.

1 participant