refactor: use inner function

pull/5014/head
Miroma 3 days ago
parent 47fb66a17f
commit a5973fc991
No known key found for this signature in database

@ -1,8 +1,7 @@
import {
dedent,
findRegions,
rawPathToToken,
stripMarkers
rawPathToToken
} from 'node/markdown/plugins/snippet'
import { expect } from 'vitest'
@ -428,64 +427,4 @@ describe('node/markdown/plugins/snippet', () => {
}
})
})
describe('stripRegionMarkers', () => {
it('removes #region and #endregion lines', () => {
const src = [
'// #region A',
'// #region B',
'console.log("Hello, World!");',
'// #endregion B',
'// #endregion A'
]
expect(stripMarkers(src, true)).toBe('console.log("Hello, World!");')
})
it('does not remove any marker if stripRegionMarkers is false', () => {
const src = [
'// #region A',
'// #region B',
'console.log("Hello, World!");',
'// #endregion B',
'// #endregion A'
]
expect(stripMarkers(src, false)).toBe(src.join('\n'))
})
it('removes region markers for various syntaxes', () => {
const src = [
'<!-- #region html -->',
'<div>hi</div>',
'<!-- #endregion html -->',
'/* #region css */',
'body {}',
'/* #endregion css */',
'#pragma region cpp',
'int main(){}',
'#pragma endregion cpp',
'::#region bat',
'ECHO ON',
'REM #endregion bat'
]
const out = stripMarkers(src, true)
expect(out).not.toContain('#region')
expect(out).not.toContain('#endregion')
expect(out).toContain('<div>hi</div>')
expect(out).toContain('body {}')
expect(out).toContain('int main(){}')
expect(out).toContain('ECHO ON')
})
it('removes markers even if indented or with extra spaces', () => {
const src = [
' // #region spaced ',
'\t/* #region */',
'code();',
' // #endregion spaced',
'/* #endregion */'
]
const out = stripMarkers(src, true)
expect(out.trim()).toBe('code();')
})
})
})

@ -126,23 +126,23 @@ export function findRegions(lines: string[], regionName: string) {
return returned
}
export function stripMarkers(lines: string[], stripMarkers: boolean): string {
if (!stripMarkers) return lines.join('\n')
return lines
.filter((l) => {
for (const m of markers) {
if (m.start.test(l) || m.end.test(l)) return false
}
return true
})
.join('\n')
}
export const snippetPlugin = (
md: MarkdownItAsync,
srcDir: string,
stripMarkersFromSnippets = false
) => {
function stripMarkers(lines: string[]): string {
if (!stripMarkersFromSnippets) return lines.join('\n')
return lines
.filter((l) => {
for (const m of markers) {
if (m.start.test(l) || m.end.test(l)) return false
}
return true
})
.join('\n')
}
const parser: RuleBlock = (state, startLine, endLine, silent) => {
const CH = '<'.charCodeAt(0)
const pos = state.bMarks[startLine] + state.tShift[startLine]
@ -231,8 +231,7 @@ export const snippetPlugin = (
lines
.slice(r.start, r.end)
.filter((l) => !(r.re.start.test(l) || r.re.end.test(l)))
),
stripMarkersFromSnippets
)
)
)
} else {
@ -241,7 +240,7 @@ export const snippetPlugin = (
return fence(...args)
}
} else {
content = stripMarkers(content.split('\n'), stripMarkersFromSnippets)
content = stripMarkers(content.split('\n'))
}
token.content = content

Loading…
Cancel
Save