fix(docs-infra): apply custom autoLinkCode filters to single-word <code> elements (#41709)
				
					
				
			Previously, the `autoLinkCode` Dgeni post-processor would not apply the custom filters when matching the whole contents of a `<code>` element. This meant that custom filters would not be applied to single-word `<code>` elements. You can see occurrences of this issue in the following sections of the "Reactive forms" guide: - [Creating nested form groups][1] (look for `street, city, state, and zip controls`) - [Using the FormBuilder service to generate controls][2] (look for `group method`) This commit fixes this by also applying the custom filters when processing the whole contents of a `<code>` element. This commit also updates the `filterPipes` custom filter to allow matching a pipe's name in a single-word `<code>` element (where there is no preceeding `|` character). [1]: https://v10.angular.io/guide/reactive-forms#creating-nested-form-groups [2]: https://v10.angular.io/guide/reactive-forms#using-the-formbuilder-service-to-generate-controls PR Close #41709
This commit is contained in:
		
							parent
							
								
									de19b8bb88
								
							
						
					
					
						commit
						a938849148
					
				| @ -55,7 +55,7 @@ module.exports = function autoLinkCode(getDocFromAlias) { | ||||
|           const index = parent.children.indexOf(node); | ||||
| 
 | ||||
|           // Can we convert the whole text node into a doc link?
 | ||||
|           const docs = getDocFromAlias(node.value); | ||||
|           const docs = getFilteredDocsFromAlias([node.value], 0); | ||||
|           if (foundValidDoc(docs, node.value, file)) { | ||||
|             parent.children.splice(index, 1, createLinkNode(docs[0], node.value)); | ||||
|           } else { | ||||
| @ -89,14 +89,18 @@ module.exports = function autoLinkCode(getDocFromAlias) { | ||||
|     return ancestors.some(ancestor => is(ancestor, 'a')); | ||||
|   } | ||||
| 
 | ||||
|   function getFilteredDocsFromAlias(words, index) { | ||||
|     // Remove docs that fail the custom filter tests.
 | ||||
|     return autoLinkCodeImpl.customFilters.reduce( | ||||
|         (docs, filter) => filter(docs, words, index), getDocFromAlias(words[index])); | ||||
|   } | ||||
| 
 | ||||
|   function getNodes(node, file) { | ||||
|     return textContent(node) | ||||
|         .split(/([A-Za-z0-9_.-]+)/) | ||||
|         .filter(word => word.length) | ||||
|         .map((word, index, words) => { | ||||
|           // remove docs that fail the custom filter tests
 | ||||
|           const filteredDocs = autoLinkCodeImpl.customFilters.reduce( | ||||
|               (docs, filter) => filter(docs, words, index), getDocFromAlias(word)); | ||||
|           const filteredDocs = getFilteredDocsFromAlias(words, index); | ||||
| 
 | ||||
|           return foundValidDoc(filteredDocs, word, file) ? | ||||
|               // Create a link wrapping the text node.
 | ||||
|  | ||||
| @ -89,7 +89,7 @@ describe('autoLinkCode post-processor', () => { | ||||
|        expect(doc.renderedContent).toEqual('<code>xyz-MyClass</code>'); | ||||
|      }); | ||||
| 
 | ||||
|   it('should ignore code items that are filtered out by custom filters', () => { | ||||
|   it('should ignore code items that are filtered out by custom filters (multiple words)', () => { | ||||
|     autoLinkCode.customFilters = [filterPipes]; | ||||
|     aliasMap.addDoc({ | ||||
|       docType: 'pipe', | ||||
| @ -115,6 +115,27 @@ describe('autoLinkCode post-processor', () => { | ||||
|             '</code>'); | ||||
|   }); | ||||
| 
 | ||||
|   it('should ignore code items that are filtered out by custom filters (single word)', () => { | ||||
|     const filterAnchors = (docs, words, index) => (words[index].toLowerCase() === 'a') ? [] : docs; | ||||
|     autoLinkCode.customFilters = [filterAnchors]; | ||||
|     autoLinkCode.docTypes = ['directive']; | ||||
| 
 | ||||
|     aliasMap.addDoc({ | ||||
|       docType: 'directive', | ||||
|       id: 'MyAnchorDirective', | ||||
|       aliases: ['MyAnchorDirective', 'a'], | ||||
|       path: 'a/b/my-anchor-directive', | ||||
|     }); | ||||
|     const doc = { | ||||
|       docType: 'test-doc', | ||||
|       renderedContent: '<code>a</code>', | ||||
|     }; | ||||
| 
 | ||||
|     processor.$process([doc]); | ||||
| 
 | ||||
|     expect(doc.renderedContent).toBe('<code>a</code>'); | ||||
|   }); | ||||
| 
 | ||||
|   it('should ignore generated nodes', () => { | ||||
|     const filterAnchors = (docs, words, index) => (words[index].toLowerCase() === 'a') ? [] : docs; | ||||
|     autoLinkCode.customFilters = [filterAnchors]; | ||||
|  | ||||
| @ -8,5 +8,6 @@ module.exports = function filterPipes() { | ||||
|     docs.filter(doc => | ||||
|       doc.docType !== 'pipe' || | ||||
|       doc.pipeOptions.name !== '\'' + words[index] + '\'' || | ||||
|       index > 0 && words[index - 1].trim() === '|'); | ||||
|       index === 0 || | ||||
|       words[index - 1].trim() === '|'); | ||||
| }; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user