Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ jobs:
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Initialize CodeQL
uses: github/codeql-action/init@4e94bd11f71e507f7f87df81788dff88d1dacbfb # 4.31.0
uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # 4.36.2
with:
languages: javascript-typescript
config-file: ./.github/codeql/codeql-config.yml

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@4e94bd11f71e507f7f87df81788dff88d1dacbfb # 4.31.0
uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # 4.36.2
12 changes: 12 additions & 0 deletions packages/docusaurus-utils/src/__tests__/markdownUtils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,18 @@ describe('createExcerpt', () => {
).toBe('Lorem ipsum dolor sit amet, consectetur adipiscing elit.');
});

it('creates excerpt after a multi-line JSX element', () => {
expect(
createExcerpt(dedent`
<MyComponent
prop={{a: 'b'}}
/>

Lorem ipsum dolor sit amet.
`),
).toBe('Lorem ipsum dolor sit amet.');
});

it('creates excerpt after multi-line imports', () => {
expect(
createExcerpt(dedent`
Expand Down
15 changes: 15 additions & 0 deletions packages/docusaurus-utils/src/markdownUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ export function createExcerpt(fileString: string): string | undefined {
.split(/\r?\n/);
let inCode = false;
let inImport = false;
let inHTML = false;
let lastCodeFence = '';

for (const fileLine of fileLines) {
Expand Down Expand Up @@ -127,6 +128,20 @@ export function createExcerpt(fileString: string): string | undefined {
continue;
}

// Skip lines inside a multi-line JSX/HTML element. An opening "<Tag ..."
// with no ">" on the same line would otherwise leak into the excerpt
// (e.g. "<MyComponent"). Skip until the element's tag closes.
if (inHTML) {
if (fileLine.includes('>')) {
inHTML = false;
}
continue;
}
if (/^\s*<[a-z][^>]*$/i.test(fileLine)) {
inHTML = true;
continue;
}

const cleanedLine = fileLine
// Remove HTML tags.
.replace(/<[^>]*>/g, '')
Expand Down
Loading