Skip to content

Commit baeb523

Browse files
nnaydenowNayden Naydenov
and
Nayden Naydenov
authored
chore: add attributes to cem (#8405)
Co-authored-by: Nayden Naydenov <[email protected]>
1 parent 220eac4 commit baeb523

File tree

5 files changed

+52
-4
lines changed

5 files changed

+52
-4
lines changed

.vscode/settings.json

+6-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,10 @@
44
"./packages/localization",
55
"./packages/main",
66
"./packages/fiori",
7-
]
7+
],
8+
"html.customData": [
9+
"./packages/base/dist/vscode.html-custom-data.json",
10+
"./packages/main/dist/vscode.html-custom-data.json",
11+
"./packages/fiori/dist/vscode.html-custom-data.json"
12+
],
813
}

packages/tools/lib/cem/custom-elements-manifest.config.mjs

+24-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,11 @@ import {
1919
isClass,
2020
normalizeTagType,
2121
logDocumentationError,
22-
displayDocumentationErrors
22+
displayDocumentationErrors,
23+
toKebabCase
2324
} from "./utils.mjs";
25+
import { generateCustomData } from "cem-plugin-vs-code-custom-data-generator";
26+
import { customElementJetBrainsPlugin } from "custom-element-jet-brains-integration";
2427

2528
const packageJSON = JSON.parse(fs.readFileSync("./package.json"));
2629

@@ -169,6 +172,23 @@ function processClass(ts, classNode, moduleDoc) {
169172
member._ui5noAttribute = propertyDecorator?.expression?.arguments[0]?.properties?.find(property => property.name.text === "noAttribute")?.initializer?.kind === ts.SyntaxKind.TrueKeyword || undefined;
170173
}
171174

175+
if (currClass.customElement && member.privacy === "public" && !propertyDecorator?.expression?.arguments[0]?.properties?.find(property => property.name.text === "multiple") && !["object"].includes(member._ui5validator?.toLowerCase())) {
176+
const filename = classNode.getSourceFile().fileName;
177+
const sourceFile = typeProgram.getSourceFile(filename);
178+
const tsProgramClassNode = sourceFile.statements.find(statement => ts.isClassDeclaration(statement) && statement.name?.text === classNode.name?.text);
179+
const tsProgramMember = tsProgramClassNode.members.find(m => ts.isPropertyDeclaration(m) && m.name?.text === member.name);
180+
const attributeValue = typeChecker.typeToString(typeChecker.getTypeAtLocation(tsProgramMember), tsProgramMember);
181+
182+
currClass.attributes.push({
183+
description: member.description,
184+
name: toKebabCase(member.name),
185+
default: member.default,
186+
fieldName: member.name,
187+
type: { text: attributeValue },
188+
deprecated: member.deprecated
189+
})
190+
}
191+
172192
if (hasTag(memberParsedJsDoc, "formProperty")) {
173193
member._ui5formProperty = true;
174194
}
@@ -334,7 +354,7 @@ const processPublicAPI = object => {
334354
if ((key === "privacy" && object[key] !== "public") || (key === "_ui5privacy" && object[key] !== "public")) {
335355
return true;
336356
} else if (typeof object[key] === "object") {
337-
if (key === "cssParts" || key === "_ui5implements") {
357+
if (key === "cssParts" || key === "attributes" || key === "_ui5implements") {
338358
continue;
339359
}
340360

@@ -475,5 +495,7 @@ export default {
475495
}
476496
}
477497
},
498+
generateCustomData({ outdir: "dist", cssFileName: null, cssPropertiesDocs: false }),
499+
customElementJetBrainsPlugin({ outdir: "dist", cssFileName: null, cssPropertiesDocs: false })
478500
],
479501
};

packages/tools/lib/cem/utils.mjs

+5
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ const getDeprecatedStatus = (jsdocComment) => {
1414
: undefined;
1515
};
1616

17+
const toKebabCase = str => {
18+
return str.replaceAll(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? "-" : "") + $.toLowerCase())
19+
}
20+
1721
const normalizeDescription = (description) => {
1822
return typeof description === 'string' ? description.replaceAll(/^-\s+|^(\n)+|(\n)+$/g, ""): description;
1923
}
@@ -376,4 +380,5 @@ export {
376380
normalizeTagType,
377381
displayDocumentationErrors,
378382
logDocumentationError,
383+
toKebabCase
379384
};

packages/tools/package.json

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
},
2323
"dependencies": {
2424
"@custom-elements-manifest/analyzer": "^0.8.4",
25+
"cem-plugin-vs-code-custom-data-generator": "^1.4.2",
26+
"custom-element-jet-brains-integration": "^1.4.4",
2527
"@typescript-eslint/eslint-plugin": "^6.9.0",
2628
"@typescript-eslint/parser": "^6.9.0",
2729
"@wdio/cli": "^7.19.7",

yarn.lock

+15-1
Original file line numberDiff line numberDiff line change
@@ -7466,6 +7466,13 @@ ccount@^2.0.0:
74667466
resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5"
74677467
integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==
74687468

7469+
cem-plugin-vs-code-custom-data-generator@^1.4.2:
7470+
version "1.4.2"
7471+
resolved "https://registry.yarnpkg.com/cem-plugin-vs-code-custom-data-generator/-/cem-plugin-vs-code-custom-data-generator-1.4.2.tgz#d81d93231d31701eb45be823109ebe9bb22a3aa2"
7472+
integrity sha512-Hjj7U0CkX1H8uym9SDkuRj5t2SEx6Iyys4hC4m/5F2MBcCeMPkMR5BJZlTpatcKdDRZh21tVJz+S/FbKqiniNA==
7473+
dependencies:
7474+
prettier "^2.7.1"
7475+
74697476
chai@^4.3.4:
74707477
version "4.3.7"
74717478
resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51"
@@ -8691,6 +8698,13 @@ currently-unhandled@^0.4.1:
86918698
dependencies:
86928699
array-find-index "^1.0.1"
86938700

8701+
custom-element-jet-brains-integration@^1.4.4:
8702+
version "1.4.4"
8703+
resolved "https://registry.yarnpkg.com/custom-element-jet-brains-integration/-/custom-element-jet-brains-integration-1.4.4.tgz#7dfd406d42b69a2097d5be67226521b845a82857"
8704+
integrity sha512-HEiTy5jBKQa1QdC5jaFbFkXkhHmgwJ0oRLjKK/mZuxuUx0+/wCFRjHBZX51qu5KYj6Ta/gPXcr3blCzuBHXF7A==
8705+
dependencies:
8706+
prettier "^2.8.0"
8707+
86948708
86958709
version "1.0.0"
86968710
resolved "https://registry.yarnpkg.com/custom-elements-manifest/-/custom-elements-manifest-1.0.0.tgz#b35c2129076a1dc9f95d720c6f7b5b71a857274b"
@@ -16787,7 +16801,7 @@ prepend-http@^2.0.0:
1678716801
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
1678816802
integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==
1678916803

16790-
prettier@^2.8.0, prettier@^2.8.1:
16804+
prettier@^2.7.1, prettier@^2.8.0, prettier@^2.8.1:
1679116805
version "2.8.8"
1679216806
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
1679316807
integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==

0 commit comments

Comments
 (0)