Skip to content

Commit 99f2865

Browse files
committed
2 parents 9903c3f + 27bacf8 commit 99f2865

File tree

11 files changed

+318
-24
lines changed

11 files changed

+318
-24
lines changed

packages/analyzer/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## Release 0.4.12
2+
- Handle `@ignore` and `@internal` jsdoc
3+
14
## Release 0.4.11
25
- Merge together getter/setter pairs when possible
36
- Fix inheritance default/type bug

packages/analyzer/custom-elements.json

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,57 @@
66
"kind": "javascript-module",
77
"path": "fixtures/-default/package/bar.js",
88
"declarations": [
9+
{
10+
"kind": "variable",
11+
"name": "variable",
12+
"type": {
13+
"text": "string"
14+
},
15+
"default": "'var'"
16+
},
917
{
1018
"kind": "class",
1119
"description": "",
12-
"name": "MyElement",
20+
"name": "IncludeMe",
1321
"members": [
1422
{
1523
"kind": "field",
16-
"name": "foo",
24+
"name": "included",
1725
"type": {
1826
"text": "string"
19-
}
20-
},
21-
{
22-
"kind": "field",
23-
"name": "foo",
24-
"static": true
27+
},
28+
"default": "'hello world'"
2529
}
2630
],
2731
"superclass": {
2832
"name": "HTMLElement"
2933
},
34+
"tagName": "include-me",
3035
"customElement": true
3136
}
3237
],
3338
"exports": [
3439
{
3540
"kind": "js",
36-
"name": "MyElement",
41+
"name": "variable",
42+
"declaration": {
43+
"name": "variable",
44+
"module": "fixtures/-default/package/bar.js"
45+
}
46+
},
47+
{
48+
"kind": "js",
49+
"name": "IncludeMe",
50+
"declaration": {
51+
"name": "IncludeMe",
52+
"module": "fixtures/-default/package/bar.js"
53+
}
54+
},
55+
{
56+
"kind": "custom-element-definition",
57+
"name": "include-me",
3758
"declaration": {
38-
"name": "MyElement",
59+
"name": "IncludeMe",
3960
"module": "fixtures/-default/package/bar.js"
4061
}
4162
}
Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,50 @@
1+
/** @internal */
2+
export const dontIncludeMe = false; // should not be in declarations
13

2-
export class MyElement extends HTMLElement {
3-
4-
set foo(){}
5-
6-
/** @type {string} */
7-
get foo(): string {}
8-
9-
static foo;
4+
/** @ignore */
5+
export const meNeither = false; // should not be in declarations
6+
7+
export const variable = 'var';
8+
9+
/** @ignore */
10+
export class IgnoreMe extends HTMLElement { }
11+
12+
customElements.define("ignore-me", IgnoreMe);
13+
14+
export class IncludeMe extends HTMLElement {
15+
included = 'hello world';
16+
17+
/** @ignore */
18+
sneaky = 'deaky';
19+
20+
ignoreThis2 = '';
21+
22+
constructor() {
23+
super();
24+
25+
/** @ignore */
26+
this.ignoreThisAlso = 'hidden';
27+
28+
/** @ignore */
29+
this.ignoreThis2 = 'hidden';
30+
}
31+
32+
/** @internal */
33+
hideMe() {
34+
return '🙈'
35+
}
36+
}
37+
38+
customElements.define("include-me", IncludeMe);
39+
40+
/** @ignore */
41+
var ignoreMePlease = 'haha';
42+
43+
/** @internal */
44+
var excludeMe, andMe = 'something private';
45+
46+
export {
47+
ignoreMePlease,
48+
excludeMe,
49+
andMe,
1050
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
{
2+
"schemaVersion": "1.0.0",
3+
"readme": "",
4+
"modules": [
5+
{
6+
"kind": "javascript-module",
7+
"path": "fixtures/jsdoc-ignore-internal/package/my-element.js",
8+
"declarations": [
9+
{
10+
"kind": "variable",
11+
"name": "variable",
12+
"type": {
13+
"text": "string"
14+
},
15+
"default": "'var'"
16+
},
17+
{
18+
"kind": "class",
19+
"description": "",
20+
"name": "IncludeMe",
21+
"members": [
22+
{
23+
"kind": "field",
24+
"name": "included",
25+
"type": {
26+
"text": "string"
27+
},
28+
"default": "'hello world'"
29+
}
30+
],
31+
"superclass": {
32+
"name": "HTMLElement"
33+
},
34+
"tagName": "include-me",
35+
"customElement": true
36+
}
37+
],
38+
"exports": [
39+
{
40+
"kind": "js",
41+
"name": "variable",
42+
"declaration": {
43+
"name": "variable",
44+
"module": "fixtures/jsdoc-ignore-internal/package/my-element.js"
45+
}
46+
},
47+
{
48+
"kind": "js",
49+
"name": "IncludeMe",
50+
"declaration": {
51+
"name": "IncludeMe",
52+
"module": "fixtures/jsdoc-ignore-internal/package/my-element.js"
53+
}
54+
},
55+
{
56+
"kind": "custom-element-definition",
57+
"name": "include-me",
58+
"declaration": {
59+
"name": "IncludeMe",
60+
"module": "fixtures/jsdoc-ignore-internal/package/my-element.js"
61+
}
62+
}
63+
]
64+
}
65+
]
66+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
{
2+
"schemaVersion": "1.0.0",
3+
"readme": "",
4+
"modules": [
5+
{
6+
"kind": "javascript-module",
7+
"path": "fixtures/jsdoc-ignore-internal/package/my-element.js",
8+
"declarations": [
9+
{
10+
"kind": "variable",
11+
"name": "variable",
12+
"type": {
13+
"text": "string"
14+
},
15+
"default": "'var'"
16+
},
17+
{
18+
"kind": "class",
19+
"description": "",
20+
"name": "IncludeMe",
21+
"members": [
22+
{
23+
"kind": "field",
24+
"name": "included",
25+
"type": {
26+
"text": "string"
27+
},
28+
"default": "'hello world'"
29+
}
30+
],
31+
"superclass": {
32+
"name": "HTMLElement"
33+
},
34+
"tagName": "include-me",
35+
"customElement": true
36+
}
37+
],
38+
"exports": [
39+
{
40+
"kind": "js",
41+
"name": "variable",
42+
"declaration": {
43+
"name": "variable",
44+
"module": "fixtures/jsdoc-ignore-internal/package/my-element.js"
45+
}
46+
},
47+
{
48+
"kind": "js",
49+
"name": "IncludeMe",
50+
"declaration": {
51+
"name": "IncludeMe",
52+
"module": "fixtures/jsdoc-ignore-internal/package/my-element.js"
53+
}
54+
},
55+
{
56+
"kind": "custom-element-definition",
57+
"name": "include-me",
58+
"declaration": {
59+
"name": "IncludeMe",
60+
"module": "fixtures/jsdoc-ignore-internal/package/my-element.js"
61+
}
62+
}
63+
]
64+
}
65+
]
66+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/** @internal */
2+
export const dontIncludeMe = false; // should not be in declarations
3+
4+
/** @ignore */
5+
export const meNeither = false; // should not be in declarations
6+
7+
export const variable = 'var';
8+
9+
/** @ignore */
10+
export class IgnoreMe extends HTMLElement { }
11+
12+
customElements.define("ignore-me", IgnoreMe);
13+
14+
export class IncludeMe extends HTMLElement {
15+
included = 'hello world';
16+
17+
/** @ignore */
18+
sneaky = 'deaky';
19+
20+
21+
constructor() {
22+
super();
23+
24+
/** @ignore */
25+
this.ignoreThisAlso = 'hidden';
26+
}
27+
28+
/** @internal */
29+
hideMe() {
30+
return '🙈'
31+
}
32+
}
33+
34+
customElements.define("include-me", IncludeMe);
35+
36+
/** @ignore */
37+
var ignoreMePlease = 'haha';
38+
39+
/** @internal */
40+
var excludeMe, andMe = 'something private';
41+
42+
export {
43+
ignoreMePlease,
44+
excludeMe,
45+
andMe,
46+
}

packages/analyzer/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@custom-elements-manifest/analyzer",
3-
"version": "0.4.11",
3+
"version": "0.4.12",
44
"description": "",
55
"license": "MIT",
66
"type": "module",

packages/analyzer/src/features/analyse-phase/creators/createClass.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { createFunctionLike } from './createFunctionLike.js';
33
import { createAttribute, createAttributeFromField } from './createAttribute.js';
44
import { createField } from './createClassField.js';
55
import { handleHeritage, handleJsDoc, handleAttrJsDoc, handleTypeInference, handleDefaultValue } from './handlers.js';
6-
import { hasAttrAnnotation, isDispatchEvent, isPrimitive, isProperty, isReturnStatement, isStaticMember } from '../../../utils/ast-helpers.js';
6+
import { hasAttrAnnotation, hasIgnoreJSDoc, isDispatchEvent, isPrimitive, isProperty, isReturnStatement, isStaticMember } from '../../../utils/ast-helpers.js';
77
import { resolveModuleOrPackageSpecifier } from '../../../utils/index.js';
88

99

@@ -71,15 +71,15 @@ export function createClass(node, moduleDoc, context) {
7171
/**
7272
* Handle class methods
7373
*/
74-
if(ts.isMethodDeclaration(member)) {
74+
if(ts.isMethodDeclaration(member) && !hasIgnoreJSDoc(member)) {
7575
const method = createFunctionLike(member);
7676
classTemplate.members.push(method);
7777
}
7878

7979
/**
8080
* Handle fields
8181
*/
82-
if (isProperty(member)) {
82+
if (isProperty(member) && !hasIgnoreJSDoc(member)) {
8383
const field = createField(member);
8484

8585
/** Flag class fields that get assigned a variable, so we can resolve it later (in the RESOLVE-INITIALIZERS plugin) */
@@ -146,6 +146,8 @@ export function createClass(node, moduleDoc, context) {
146146

147147
getDefaultValuesFromConstructorVisitor(node, classTemplate, context);
148148

149+
classTemplate.members = classTemplate?.members?.filter(mem => !mem.ignore);
150+
149151
/**
150152
* Inheritance
151153
*/
@@ -209,6 +211,8 @@ export function getDefaultValuesFromConstructorVisitor(source, classTemplate, co
209211
let existingMember = classTemplate?.members?.find(member => statement.expression?.left?.name?.getText() === member.name && member.kind === 'field');
210212

211213
if(!existingMember) {
214+
if(hasIgnoreJSDoc(statement)) return;
215+
212216
existingMember = {
213217
kind: 'field',
214218
name: statement.expression?.left?.name?.getText(),
@@ -217,6 +221,11 @@ export function getDefaultValuesFromConstructorVisitor(source, classTemplate, co
217221
}
218222

219223
if(existingMember) {
224+
if(hasIgnoreJSDoc(statement)) {
225+
// schedule for deletion
226+
existingMember.ignore = true;
227+
}
228+
220229
if(!existingMember?.type) {
221230
existingMember = handleTypeInference(existingMember, statement?.expression?.right);
222231
}

0 commit comments

Comments
 (0)