Re: [Pharo-users] [Ann] BPatterns: The rewrite engine at your fingertips

DK
Denis Kudriashov
Tue, Feb 3, 2026 10:16 AM

Yes. There is nice help presenter in the Pharo:

StRewriterHelpBrowserPresenter new open

[image: Screenshot 2026-02-03 at 10.15.45.png]

вт, 3 февр. 2026 г. в 01:36, Richard O'Keefe raoknz@gmail.com:

Is the "classic" rewriting syntax documented anywhere?

On Mon, 2 Feb 2026 at 22:52, Denis Kudriashov via Pharo-users <
pharo-users@lists.pharo.org> wrote:

Hi all.

This is the release of BPatterns project, one of my old ideas on how
to make the rewrite engine usable for scripting.

As a quick reminder, here is an example of the classic rewrite-engine
matching syntax:

@receiver isNil ifTrue: @nilBlock

In practice, patterns like this usually live inside string
literals—hidden away in lint rules, deprecations, or refactorings.
To use them for manual code search or rewriting, you typically need a
dedicated tool.

Now compare that with the same pattern expressed as a BPattern:

[ any isNil ifTrue: anyBlock ] bpattern

No special syntax.
No magical tools.
Just pure Smalltalk.

You write a block.
You send #bpattern.
You’re done.

Every editor understands it.
Every tool respects it.

Want to see where this pattern appears?

  • [ any isNil ifTrue: anyBlock ] bpattern browseUsers*

[image: Screenshot 2026-01-31 at 12.16.19.png]

Want to rewrite all of them?

[[ any isNil ifTrue: anyBlock ] -> [ any ifNil: anyBlock ]] brewrite
preview

[image: Screenshot 2026-01-31 at 12.17.57.png]

Because BPatterns are real Smalltalk code, all development tools work
out of the box:
syntax highlighting, completion, navigation, refactorings.

This is the rewrite engine treated as a first-class citizen.

Not strings.
Not tooling sidecars.
Not just for advanced users.

A rewrite engine you can actually use.

And follow the project on GitHub:

- https://github.com/dionisiydk/BPatterns


-
Yes. There is nice help presenter in the Pharo: StRewriterHelpBrowserPresenter new open [image: Screenshot 2026-02-03 at 10.15.45.png] вт, 3 февр. 2026 г. в 01:36, Richard O'Keefe <raoknz@gmail.com>: > Is the "classic" rewriting syntax documented anywhere? > > On Mon, 2 Feb 2026 at 22:52, Denis Kudriashov via Pharo-users < > pharo-users@lists.pharo.org> wrote: > >> Hi all. >> >> This is the release of *BPatterns* project, one of my old ideas on how >> to make the rewrite engine usable for scripting. >> >> As a quick reminder, here is an example of the classic rewrite-engine >> matching syntax: >> >> *``@receiver isNil ifTrue: ``@nilBlock* >> >> >> In practice, patterns like this usually live inside string >> literals—hidden away in lint rules, deprecations, or refactorings. >> To use them for *manual* code search or rewriting, you typically need a >> dedicated tool. >> >> Now compare that with the same pattern expressed as a *BPattern*: >> >> *[ any isNil ifTrue: anyBlock ] bpattern* >> >> No special syntax. >> No magical tools. >> Just pure Smalltalk. >> >> You write a block. >> You send #bpattern. >> You’re done. >> >> Every editor understands it. >> Every tool respects it. >> >> Want to see where this pattern appears? >> >> * [ any isNil ifTrue: anyBlock ] bpattern browseUsers* >> >> >> [image: Screenshot 2026-01-31 at 12.16.19.png] >> >> Want to rewrite all of them? >> >> *[[ any isNil ifTrue: anyBlock ] -> [ any ifNil: anyBlock ]] brewrite >> preview* >> >> >> [image: Screenshot 2026-01-31 at 12.17.57.png] >> >> Because *BPatterns are real Smalltalk code*, all development tools work >> out of the box: >> syntax highlighting, completion, navigation, refactorings. >> >> This is the rewrite engine treated as a *first-class citizen*. >> >> Not strings. >> Not tooling sidecars. >> Not just for advanced users. >> >> *A rewrite engine you can actually use.* >> * A rewrite engine at your fingertips.* >> More details are in the blog post: >> >> - >> https://dionisiydk.blogspot.com/2026/02/bpatterns-rewrite-engine-with-smalltalk.html >> >> And follow the project on GitHub: >> >> - https://github.com/dionisiydk/BPatterns >> >> >> - >> >>