Skip to content

Commit

Permalink
Merge branch 'main' into regexp-modifiers
Browse files Browse the repository at this point in the history
  • Loading branch information
rbuckton authored Sep 27, 2024
2 parents 5a694e4 + 7df8f59 commit 8e288c7
Show file tree
Hide file tree
Showing 17 changed files with 2,668 additions and 1,935 deletions.
4 changes: 3 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: ljharb/actions/node/install@d9f477827ed71a259056764107f74afc29febcae
name: 'nvm install lts/* && npm ci'
name: 'nvm install lts/* && npm ci --no-audit'
env:
NPM_CONFIG_AUDIT: false
with:
node-version: lts/*
use-npm-ci: true
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: ljharb/actions/node/install@d9f477827ed71a259056764107f74afc29febcae
name: 'nvm install lts/* && npm ci'
name: 'nvm install lts/* && npm ci --no-audit'
env:
NPM_CONFIG_AUDIT: false
with:
node-version: lts/*
use-npm-ci: true
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/enforce-format.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: ljharb/actions/node/install@d9f477827ed71a259056764107f74afc29febcae
name: 'nvm install lts/* && npm ci'
name: 'nvm install lts/* && npm ci --no-audit'
env:
NPM_CONFIG_AUDIT: false
with:
node-version: lts/*
use-npm-ci: true
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/ipr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: ljharb/actions/node/install@d9f477827ed71a259056764107f74afc29febcae
name: 'nvm install lts/* && npm ci'
name: 'nvm install lts/* && npm ci --no-audit'
env:
NPM_CONFIG_AUDIT: false
with:
node-version: lts/*
use-npm-ci: true
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/preview-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: ljharb/actions/node/install@d9f477827ed71a259056764107f74afc29febcae
name: 'nvm install lts/* && npm ci'
name: 'nvm install lts/* && npm ci --no-audit'
env:
NPM_CONFIG_AUDIT: false
with:
node-version: lts/*
use-npm-ci: true
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: ljharb/actions/node/install@d9f477827ed71a259056764107f74afc29febcae
name: 'nvm install lts/* && npm ci'
name: 'nvm install lts/* && npm ci --no-audit'
env:
NPM_CONFIG_AUDIT: false
with:
node-version: lts/*
use-npm-ci: true
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-biblio.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
registry-url: 'https://registry.npmjs.org'

- name: Install dependencies
run: npm ci
run: npm ci --no-audit

- name: Publish biblio
run: scripts/publish-biblio.sh
Expand Down
24 changes: 24 additions & 0 deletions .github/workflows/spellcheck.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: 'ecma-262'

on: [pull_request]

jobs:
spellcheck:
name: 'check for newly-introduced spelling errors'
runs-on: ubuntu-latest

steps:
- run: sudo apt-get install aspell
- uses: actions/checkout@v3
with:
# Number of commits to fetch. 0 indicates all history for all branches and tags.
# Default: 1
fetch-depth: 0
- uses: ljharb/actions/node/install@d9f477827ed71a259056764107f74afc29febcae
name: 'nvm install lts/* && npm ci --no-audit'
env:
NPM_CONFIG_AUDIT: false
with:
node-version: lts/*
use-npm-ci: true
- run: node scripts/spellcheck.mjs origin/"${GITHUB_BASE_REF}"
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ node_modules/
out/
vendor/esmeta
test*.js
aspell.txt

# lockfiles we don't use are ignored
npm-shrinkwrap.json
Expand Down
50 changes: 25 additions & 25 deletions img/figure-2.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 5 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 1 addition & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,8 @@
"author": "ECMA TC39",
"license": "SEE LICENSE IN https://tc39.es/ecma262/#sec-copyright-and-software-license",
"homepage": "https://tc39.es/ecma262/",
"dependencies": {
},
"devDependencies": {
"ecmarkup": "^18.3.1",
"ecmarkup": "^19.1.0",
"glob": "^7.1.6",
"jsdom": "^15.0.0",
"pagedjs": "^0.4.3",
Expand Down
2 changes: 1 addition & 1 deletion scripts/check-form.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ if (typeof all !== 'undefined' && all !== '--all') {
throw '`all` arg, if provided, must be `--all`'
}

const sha = String(execSync(`git rev-parse --short ${branch}`)).trim();
const sha = String(execSync(`git rev-parse ${branch}`)).trim();

const request = async (url, method = 'GET', postData) => {
// adapted from https://medium.com/@gevorggalstyan/how-to-promisify-node-js-http-https-requests-76a5a58ed90c
Expand Down
35 changes: 22 additions & 13 deletions scripts/insert_snapshot_warning.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

const fs = require('fs');
const path = require('path');
const { JSDOM } = require('jsdom');
const { JSDOM, VirtualConsole } = require('jsdom');
const { execSync } = require('child_process');

const COMMIT = String(execSync('git rev-parse --verify HEAD')).trim();
Expand All @@ -13,21 +13,30 @@ const WARNING_CSS = fs.readFileSync(path.join(__dirname, 'snapshot_warning.css')

console.log('Inserting snapshot reference warning...');

JSDOM.fromFile('./out/index.html', { contentType: 'text/html; charset=utf-8' }).then((dom) => {
const { document } = dom.window;
const virtualConsole = new VirtualConsole();
virtualConsole.on('error', () => {
// Suppress warnings from e.g. CSS features not supported by JSDOM
});

const style = document.createElement('style');
style.textContent = WARNING_CSS;
document.head.append(style);
(async () => {
let files = ['out/index.html', ...fs.readdirSync('out/multipage').filter(f => f.endsWith('.html')).map(f => 'out/multipage/' + f)];
for (let file of files) {
console.log(file);
let dom = await JSDOM.fromFile(file, { contentType: 'text/html; charset=utf-8', virtualConsole });
const { document } = dom.window;

// insert WARNING_HTML in beginning of body so it renders
// first even on slower devices and browsers
document.body.insertAdjacentHTML('afterbegin', WARNING_HTML);
const style = document.createElement('style');
style.textContent = WARNING_CSS;
document.head.append(style);

fs.writeFileSync('./out/index.html', dom.serialize(), 'utf8');
// insert WARNING_HTML in beginning of body so it renders
// first even on slower devices and browsers
document.body.insertAdjacentHTML('afterbegin', WARNING_HTML);

fs.writeFileSync(file, dom.serialize(), 'utf8');
}
console.log('Done!');
}).catch((reason) => {
console.error(reason);
process.exitCode = 1;
})().catch(e => {
console.error(e);
process.exit(1);
});
10 changes: 10 additions & 0 deletions scripts/snapshot_warning.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,13 @@
living specification.
</p>
</details>
<script>
let base = "https://ci.tc39.es/preview/tc39/ecma262/sha/";
if (
location.href.startsWith(base) &&
document.referrer.startsWith(base) &&
location.href.substring(base.length, base.length + 40) === document.referrer.substring(base.length, base.length + 40)
) {
document.querySelector(".annoying-warning").open = false;
}
</script>
72 changes: 72 additions & 0 deletions scripts/spellcheck.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import { promisify } from 'node:util';
import { exec } from 'node:child_process';
const execP = promisify(exec);
import { writeFile } from 'node:fs/promises';

const MIN_WORD_SIZE = 3;

const BASE_REF = process.argv[2];
const ASPELL_OPTS = [
'--add-html-check=alt,title,caption,variants',
'--ignore-case',
'--master=en_GB-ize',
'--mode=html',
'--run-together',
'--run-together-limit=99',
'--run-together-min=2',
'list',
].join(' ');

function makeDict(words) {
return `personal_ws-1.1 en ${words.length}\n${words.join('\n')}`;
}

function lines(text) {
if (text.length === 0) return [];
return text.split('\n');
}

console.log(`base ref: ${BASE_REF}`);

let { stdout } = await execP(`git show "${BASE_REF}":spec.html | aspell ${ASPELL_OPTS} | sort -fu`);

let existingWords = lines(stdout.trim());

let existingComponents = Array.from(new Set(
existingWords
.flatMap(word => [...word.matchAll(/(?:^[a-z]|[A-Z])[a-z]{2,}/g)])
.map(([w]) => w.toLowerCase())
));

({ stdout } = await execP(`echo ${existingComponents.map(w => JSON.stringify(w)).join(' ')} | aspell ${ASPELL_OPTS} | sort -fu`));

let existingComponentsReduced = lines(stdout.trim());

await writeFile('aspell.txt', makeDict(existingComponentsReduced));

({ stdout } = await execP(`echo ${existingWords.map(w => JSON.stringify(w)).join(' ')} | aspell --personal=./aspell.txt ${ASPELL_OPTS}`));

let novel = [...existingComponentsReduced, ...lines(stdout.trim())].filter(w => w.length >= MIN_WORD_SIZE);
novel.sort();
console.log(`\npreviously used novel words: ${novel.join(', ')}`);
await writeFile('aspell.txt', makeDict(novel));

({ stdout } = await execP(`aspell --personal=./aspell.txt ${ASPELL_OPTS} list <spec.html | sort -u`));
let misspellings = lines(stdout.trim()).filter(w => w.length >= MIN_WORD_SIZE);

if (misspellings.length > 0) {
console.log(`\nmisspellings: ${misspellings.join(', ')}`);
let pattern = misspellings.map(w => `-e ${JSON.stringify(w)}`).join(' --or ');
({ stdout } = await execP(`git grep --line-number --column --fixed-strings --only-matching ${pattern} -- spec.html`));

console.log('');

let info = lines(stdout.trim());
for (let warning of info) {
let [match, file, line, col, typo] = warning.match(/^([^:]+):(\d+):(\d+):(.*)$/);
let title = 'Potential Typo';
let message = `${JSON.stringify(typo)} is not a previously used word or composed of previously used words. Perhaps it is a typo?`;
// https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-a-warning-message
console.log(`::warning file=${file},line=${line},endLine=${line},col=${col},endColumn=${col + typo.length},title=${title}::${message}`);
}
}
Loading

0 comments on commit 8e288c7

Please sign in to comment.