Skip to content

Commit

Permalink
Consider block attributes for chomp package replacement
Browse files Browse the repository at this point in the history
See gh-24

Signed-off-by: Andy Wilkinson <[email protected]>
  • Loading branch information
wilkinsona authored and philwebb committed Jan 27, 2025
1 parent 0145787 commit 96db3e3
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
9 changes: 7 additions & 2 deletions lib/code-chomping-extension.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,16 @@ function createExtensionGroup () {
this.treeProcessor(function () {
this.process((doc) => {
const chompDefault = doc.getAttribute('chomp', 'default')
const package_ = doc.getAttribute('chomp_package_replacement') ?? doc.getAttribute('chomp-package-replacement')
const packageReplacementDefault = getPackageReplacement(doc)
const blocks = doc.findBy(
{ context: 'listing' },
(candidate) => candidate.getStyle() === 'source' && JAVA_LIKE.includes(candidate.getAttribute('language'))
)
blocks.forEach((block) => {
const chomp = block.getAttribute('chomp', chompDefault)
const packageReplacement = getPackageReplacement(block) ?? packageReplacementDefault
const ops = (CHOMP_MODES[chomp] || [chomp]).reduce((accum, mode) => (accum[mode] = true) && accum, {})
if (ops.packages && package_ != null) ops.packages = package_
if (ops.packages && packageReplacement != null) ops.packages = packageReplacement
let skipRest, match
block.lines = block.getSourceLines().reduce((accum, line) => {
if (skipRest) return accum
Expand Down Expand Up @@ -72,4 +73,8 @@ function createExtensionGroup () {
}
}

function getPackageReplacement (element) {
return element.getAttribute('chomp_package_replacement') ?? element.getAttribute('chomp-package-replacement')
}

module.exports = { register, createExtensionGroup }
23 changes: 23 additions & 0 deletions test/code-chomping-extension-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,29 @@ describe('code-chomping-extension', () => {
expect(actual).to.equal(expected)
})

it('should replace package declaration when configured on the block', () => {
const code = heredoc`
package org.example;
public class Example {}
`

const input = heredoc`
:chomp: packages
:chomp_package_replacement: org.acme
[chomp_package_replacement=com.acme]
[,java]
----
${code}
----
`

const expected = code.replace('package org.example', 'package com.acme')
const actual = run(input).getBlocks()[0].getSource()
expect(actual).to.equal(expected)
})

it('should remove remaining lines after @chomp:file', () => {
const input = heredoc`
[,java]
Expand Down

0 comments on commit 96db3e3

Please sign in to comment.