Skip to content

Commit 144d056

Browse files
committed
add test project for generic JSX transform
1 parent 80fde16 commit 144d056

11 files changed

+3055
-1
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ analysis/tests/lib
77
analysis/tests/.bsb.lock
88
analysis/tests/.merlin
99

10+
analysis/tests-generic-jsx-transform/lib
11+
analysis/tests-generic-jsx-transform/.bsb.lock
12+
analysis/tests-generic-jsx-transform/.merlin
13+
1014
tools/node_modules
1115
tools/lib
1216
tools/**/*.res.js

analysis/Makefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@ SHELL = /bin/bash
33
build-tests:
44
make -C tests build
55

6+
build-tests-generic-jsx-transform:
7+
make -C tests-generic-jsx-transform build
8+
69
build-reanalyze:
710
make -C reanalyze build
811

9-
build: build-reanalyze build-tests
12+
build: build-reanalyze build-tests build-tests-generic-jsx-transform
1013

1114
dce: build-analysis-binary
1215
opam exec reanalyze.exe -- -dce-cmt _build -suppress vendor
1316

1417
test-analysis-binary:
1518
make -C tests test
19+
make -C tests-generic-jsx-transform test
1620

1721
test-reanalyze:
1822
make -C reanalyze test
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
SHELL = /bin/bash
2+
3+
node_modules/.bin/rescript:
4+
npm install
5+
6+
build: node_modules/.bin/rescript
7+
node_modules/.bin/rescript
8+
9+
test: build
10+
./test.sh
11+
12+
clean:
13+
rm -r node_modules lib
14+
15+
.DEFAULT_GOAL := test
16+
17+
.PHONY: clean test

analysis/tests-generic-jsx-transform/package-lock.json

Lines changed: 33 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"scripts": {
3+
"build": "rescript",
4+
"clean": "rescript clean -with-deps"
5+
},
6+
"private": true,
7+
"dependencies": {
8+
"rescript": "11.1.0-rc.1"
9+
}
10+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"name": "test-generic-jsx-transform",
3+
"sources": [
4+
{
5+
"dir": "src",
6+
"subdirs": true
7+
}
8+
],
9+
"bsc-flags": ["-w -33-44-8"],
10+
"jsx": { "module": "GenericJsx" }
11+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/* Below is a number of aliases to the common `Jsx` module */
2+
type element = Jsx.element
3+
4+
type component<'props> = Jsx.component<'props>
5+
6+
type componentLike<'props, 'return> = Jsx.componentLike<'props, 'return>
7+
8+
@module("preact")
9+
external jsx: (component<'props>, 'props) => element = "jsx"
10+
11+
@module("preact")
12+
external jsxKeyed: (component<'props>, 'props, ~key: string=?, @ignore unit) => element = "jsx"
13+
14+
@module("preact")
15+
external jsxs: (component<'props>, 'props) => element = "jsxs"
16+
17+
@module("preact")
18+
external jsxsKeyed: (component<'props>, 'props, ~key: string=?, @ignore unit) => element = "jsxs"
19+
20+
/* These identity functions and static values below are optional, but lets
21+
you move things easily to the `element` type. The only required thing to
22+
define though is `array`, which the JSX transform will output. */
23+
external array: array<element> => element = "%identity"
24+
@val external null: element = "null"
25+
26+
external float: float => element = "%identity"
27+
external int: int => element = "%identity"
28+
external string: string => element = "%identity"
29+
30+
/* These are needed for Fragment (<> </>) support */
31+
type fragmentProps = {children?: element}
32+
33+
@module("preact") external jsxFragment: component<fragmentProps> = "Fragment"
34+
35+
/* The Elements module is the equivalent to the ReactDOM module in React. This holds things relevant to _lowercase_ JSX elements. */
36+
module Elements = {
37+
/* Here you can control what props lowercase JSX elements should have.
38+
A base that the React JSX transform uses is provided via JsxDOM.domProps,
39+
but you can make this anything. The editor tooling will support
40+
autocompletion etc for your specific type. */
41+
type props = {
42+
testing?: bool,
43+
test2?: string
44+
}
45+
46+
@module("preact")
47+
external jsx: (string, props) => Jsx.element = "jsx"
48+
49+
@module("preact")
50+
external div: (string, props) => Jsx.element = "jsx"
51+
52+
@module("preact")
53+
external jsxKeyed: (string, props, ~key: string=?, @ignore unit) => Jsx.element = "jsx"
54+
55+
@module("preact")
56+
external jsxs: (string, props) => Jsx.element = "jsxs"
57+
58+
@module("preact")
59+
external jsxsKeyed: (string, props, ~key: string=?, @ignore unit) => Jsx.element = "jsxs"
60+
61+
external someElement: element => option<element> = "%identity"
62+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// <div
2+
// ^com

analysis/tests-generic-jsx-transform/src/expected/GenericJsx.res.txt

Whitespace-only changes.

0 commit comments

Comments
 (0)