I have ended up writing BDD scenarios as plain code comments with conventions like capital “GIVEN” etc. A simple script to scrape test files and generate a markdown file to browse.
Then you refactor your common helper functions as natural, but you’re not forced to enclose them in steps.