diff --git a/src/core/suggestionCollection/HeaderSuggestionCollector.ts b/src/core/suggestionCollection/HeaderSuggestionCollector.ts index 1151ca3..4431aa6 100644 --- a/src/core/suggestionCollection/HeaderSuggestionCollector.ts +++ b/src/core/suggestionCollection/HeaderSuggestionCollector.ts @@ -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)) } } diff --git a/tests/headerSuggestionCollector.test.ts b/tests/headerSuggestionCollector.test.ts index f0e332b..8746304 100644 --- a/tests/headerSuggestionCollector.test.ts +++ b/tests/headerSuggestionCollector.test.ts @@ -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([[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([[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),