Skip to content

fileref.sas / varexist.sas / dquote.sas run unmodified on Jenner#8

Open
jenner-analytics wants to merge 1 commit into
sasutils:masterfrom
jenner-analytics:jenner-check/initial-bundles
Open

fileref.sas / varexist.sas / dquote.sas run unmodified on Jenner#8
jenner-analytics wants to merge 1 commit into
sasutils:masterfrom
jenner-analytics:jenner-check/initial-bundles

Conversation

@jenner-analytics

Copy link
Copy Markdown

Jenneranalytics.com provides an API that runs SAS code, with support for more than 200 SAS procedures. You can also use it with AI assistants in a collaborative workspace. It's available for Mac on the Apple App Store, and by license for Windows and Linux.

We support the larger community by
(1) increasing access to SAS-compatible systems,
(2) by providing test coverage and a test coverage framework to public SAS repos in order to encourage the use of best practices in software engineering.

Your fileref.sas runs on Jenner unmodified — this PR adds a small compatibility bundle so you can see for yourself. It's the test we wrote for your macro library, shared in case it's useful, and was assembled with AI assistance as is most code in modern businesses today.

fileref.sas's layered validation is what stood out most reading through this — it doesn't just delegate to the native FILEREF() function, it front-loads the three ways a fileref argument can be nonsense (blank, over 8 characters, not a valid V7 name) and short-circuits all of them to the same "not usable" result before ever calling into SCL. That's a small design choice, but it's the kind of defensive shaping that separates a library people actually reuse from one they have to read the source of first. The header-comment usage examples throughout the library (the %parmv walkthrough especially) read like documentation written for someone other than the author, which is rarer than it should be.

jenner-check/ is a self-contained, optional bundle: a byte-identical copy of three of your macros (dquote/squote, varexist, fileref), a small caller exercising each against inline sample data, the captured output of that run, and a runner script. Nothing outside jenner-check/ is touched, nothing executes on merge, and there are no workflow files or hooks.

jenner-check/
├── run_jenner.sh
├── README.md
├── t001_dquote_squote/   # %dquote()/%squote() quoting, round-tripped through DEQUOTE()
├── t002_varexist/        # %varexist() variable-presence checks via OPEN()/VARNUM()
└── t003_fileref/         # %fileref() name validation + real FILEREF() delegation

Check out this PR's branch and run from the repo root — jenner-check/ only exists on this branch:

gh pr checkout <PR_NUMBER>
curl -sS --data-binary @jenner-check/t001_dquote_squote/script.sas https://api.jenneranalytics.com/v1/quick

cd jenner-check && ./run_jenner.sh --all re-runs all three bundles and checks the result against each one's pinned expected.json. The hosted API is free to try, no signup required; full API reference: the docs.

Only the SAS source of the script being run (plus a two-line autoexec) is uploaded to api.jenneranalytics.com, which runs it and returns the log and listing — no data files are read or uploaded, so anything sitting next to a script stays on your machine, and nothing is sent unless you run a command yourself. It's the same exposure as pasting a snippet into any hosted tool; if a script embeds sensitive values inline, that's the one thing worth reviewing before you paste it in.

Merge it, close it, or ignore it — no response expected, and we won't open further PRs in this repo. To opt out for good, mention no-more-prs in any comment here, or open an issue titled jenner-check: opt out.


Lawrence W. Sinclair
CEO / Jenner Analytics Ltd
linkedin.com/in/lwsinclair/

Adds jenner-check/ with self-contained compatibility bundles for
dquote/squote, varexist, and fileref, each pinned against a captured
passing run, plus the shell runner and its README.
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.

1 participant