Skip to content

Commit

Permalink
chore: class link generation in release notes (#30324)
Browse files Browse the repository at this point in the history
  • Loading branch information
yury-s authored Apr 10, 2024
1 parent 15b4231 commit 01d4293
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 8 deletions.
31 changes: 25 additions & 6 deletions utils/doclint/linkUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/** @typedef {'Types'|'ReleaseNotesMd'} OutputType */

// @ts-check
const toKebabCase = require('lodash/kebabCase.js')
const Documentation = require('./documentation');

const createMarkdownLink = (languagePath, member, text) => {
function createMarkdownLink(languagePath, member, text) {
const className = toKebabCase(member.clazz.name);
const memberName = toKebabCase(member.name);
let hash = null;
Expand All @@ -27,19 +31,34 @@ const createMarkdownLink = (languagePath, member, text) => {
return `[${text}](https://playwright.dev${languagePath}/docs/api/class-${member.clazz.name.toLowerCase()}#${hash})`;
};

/**
* @param {string} languagePath
* @param {Documentation.Class} clazz
* @returns {string}
*/
function createClassMarkdownLink(languagePath, clazz) {
return `[${clazz.name}](https://playwright.dev${languagePath}/docs/api/class-${clazz.name.toLowerCase()})`;
};

/**
* @param {string} language
* @returns {import('../doclint/documentation').Renderer}
* @param {OutputType} outputType
* @returns {Documentation.Renderer}
*/
function docsLinkRendererForLanguage(language) {
function docsLinkRendererForLanguage(language, outputType) {
const languagePath = languageToRelativeDocsPath(language);
return ({ clazz, member, param, option }) => {
if (param)
return `\`${param}\``;
if (option)
return `\`${option}\``;
if (clazz)
return `{@link ${clazz.name}}`;
if (clazz) {
if (outputType === 'Types')
return `{@link ${clazz.name}}`;
if (outputType === 'ReleaseNotesMd')
return createClassMarkdownLink(languagePath, clazz);
throw new Error(`Unexpected output type ${outputType}`);
}
if (!member || !member.clazz)
throw new Error('Internal error');
const className = member.clazz.varName === 'playwrightAssertions' ? '' : member.clazz.varName + '.';
Expand Down Expand Up @@ -92,7 +111,7 @@ function assertionArgument(className) {
}

/**
* @param {import('../doclint/documentation').Member[]} args
* @param {Documentation.Member[]} args
*/
function renderJSSignature(args) {
const tokens = [];
Expand Down
2 changes: 1 addition & 1 deletion utils/generate_types/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ class TypesGenerator {
* @returns {Promise<string>}
*/
async generateTypes(overridesFile) {
this.documentation.setLinkRenderer(docsLinkRendererForLanguage('js'));
this.documentation.setLinkRenderer(docsLinkRendererForLanguage('js', 'Types'));
this.documentation.setCodeGroupsTransformer('js', tabs => tabs.filter(tab => tab.value === 'ts').map(tab => tab.spec));
this.documentation.generateSourceCodeComments();

Expand Down
2 changes: 1 addition & 1 deletion utils/render_release_notes.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ if (language === 'js') {
.mergeWith(parseApi(path.join(documentationRoot, 'test-reporter-api')));
}

documentation.setLinkRenderer(docsLinkRendererForLanguage(language));
documentation.setLinkRenderer(docsLinkRendererForLanguage(language, 'ReleaseNotesMd'));
const content = fs.readFileSync(path.join(documentationRoot, `release-notes-${language}.md`)).toString();
let nodes = md.parse(content);
documentation.renderLinksInNodes(nodes);
Expand Down

0 comments on commit 01d4293

Please sign in to comment.