Add support for using header as alias when bang character is given

This commit is contained in:
Simon Clement 2025-06-10 22:59:37 +03:00
parent ac28e0815e
commit ea52bd033b
2 changed files with 44 additions and 2 deletions

View file

@ -13,9 +13,19 @@ export class HeaderSuggestionCollector {
const [query, alias] = headerQuery.split('|')
const lowerCaseQuery = query.toLowerCase()
const headersInNote = this.metadataCollection.getHeadersIn(noteSuggestion.Path.VaultPath)
const aliasToUse = noteSuggestion.Alias ? noteSuggestion.Alias : alias
return headersInNote
let aliasToUse = noteSuggestion.Alias ? noteSuggestion.Alias : alias
let validHeaders = headersInNote
.filter(h => h.heading.toLowerCase().includes(lowerCaseQuery))
let headerCanBeUsedAsAlias = false
if (validHeaders.length === 0 && query.endsWith("!")){
const queryWithoutBang = lowerCaseQuery.slice(0, query.length - 1)
validHeaders = headersInNote.filter(h => h.heading.toLowerCase().includes(queryWithoutBang))
headerCanBeUsedAsAlias = true
}
if (headerCanBeUsedAsAlias && validHeaders.length === 1 && !alias){
aliasToUse = validHeaders[0].heading
}
return validHeaders
.map(h => new HeaderSuggestion(h.heading, h.level, aliasToUse, noteSuggestion))
}
}

View file

@ -65,6 +65,38 @@ describe('when there are headers in the note', function () {
expect(suggestion.Title).toBe('Header 1')
})
test('uses the header as alias if bang character is given after header trigger', () => {
const headers = [
Fake.HeadingCache.withTitle('Header 1').withLevel(1),
]
const headerMap = new Map<string, HeadingCache[]>([[fakeExistingNote.VaultPath, headers]])
const metadataCollection = Fake.MetaDataCollection.withHeaders(headerMap)
const collector = new HeaderSuggestionCollector(metadataCollection)
const observedSuggestions = collector.getSuggestions('Header 1!', fakeExistingNote)
expect(observedSuggestions.length).toBe(1)
const suggestion = observedSuggestions[0]
expect(suggestion.Alias).toBe('Header 1')
expect(suggestion.Title).toBe('Header 1')
})
test('does not use the header as alias if header includes bang character', () => {
const headers = [
Fake.HeadingCache.withTitle('Header 1!').withLevel(1),
]
const headerMap = new Map<string, HeadingCache[]>([[fakeExistingNote.VaultPath, headers]])
const metadataCollection = Fake.MetaDataCollection.withHeaders(headerMap)
const collector = new HeaderSuggestionCollector(metadataCollection)
const observedSuggestions = collector.getSuggestions('Header 1!', fakeExistingNote)
expect(observedSuggestions.length).toBe(1)
const suggestion = observedSuggestions[0]
expect(suggestion.Alias).toBeUndefined()
expect(suggestion.Title).toBe('Header 1!')
})
test('uses the original note alias if two aliases are given', () => {
const headers = [
Fake.HeadingCache.withTitle('Header 1').withLevel(1),