Documentation for instruction with special register shows specific register expected.
This commit is contained in:
		
							parent
							
								
									665947827b
								
							
						
					
					
						commit
						1bff1a12c2
					
				@ -10,8 +10,8 @@ This plugin delivers support for MC68000 assembly language files ([VAsm](http://
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
It adds a language parser with syntax highlighting, referencing and refactoring support, and a few more features.
 | 
					It adds a language parser with syntax highlighting, referencing and refactoring support, and a few more features.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I'm an Amiga retro democoder, and the lack of a plugin for M68k was the motivation to write one. Also, diving deep into custom language plugins has a steep
 | 
					I'm an Amiga retro democoder (among other things), and the lack of a plugin for M68k was the motivation to write one. Also, diving deep into custom language
 | 
				
			||||||
learning curve.
 | 
					plugins has a steep learning curve.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When I started the plugin in July 2021, I was not aware of the [M68k plugin efforts by Jetbrains employee Yann Cébron](https://github.com/YannCebron/m68kplugin)
 | 
					When I started the plugin in July 2021, I was not aware of the [M68k plugin efforts by Jetbrains employee Yann Cébron](https://github.com/YannCebron/m68kplugin)
 | 
				
			||||||
who has been working on the same topic for quite some time. At the time of writing, his plugin however, has not been release yet. Nevertheless, it has a lot of
 | 
					who has been working on the same topic for quite some time. At the time of writing, his plugin however, has not been release yet. Nevertheless, it has a lot of
 | 
				
			||||||
@ -154,6 +154,7 @@ are appreciated. They really are, because they do keep me motivated to continue
 | 
				
			|||||||
- Bugfix: `movem` with pc-relative mode was missing for weird immediate mode (courtesy of Yann).
 | 
					- Bugfix: `movem` with pc-relative mode was missing for weird immediate mode (courtesy of Yann).
 | 
				
			||||||
- Bugfix: Special registers for address mode matching only worked with lower case register names (courtesy of Yann).
 | 
					- Bugfix: Special registers for address mode matching only worked with lower case register names (courtesy of Yann).
 | 
				
			||||||
- Enhancement: Assembler syntax with implicit immediate 1 for shifts and rotations no longer cause syntax errors (courtesy of Yann).
 | 
					- Enhancement: Assembler syntax with implicit immediate 1 for shifts and rotations no longer cause syntax errors (courtesy of Yann).
 | 
				
			||||||
 | 
					- Enhancement: Documentation for instruction with special register shows specific register expected.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### V0.6 (09-Aug-21)
 | 
					### V0.6 (09-Aug-21)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -63,6 +63,7 @@ patchPluginXml {
 | 
				
			|||||||
      <li>Bugfix: 'movem' with pc-relative mode was missing for weird immediate mode (courtesy of Yann).
 | 
					      <li>Bugfix: 'movem' with pc-relative mode was missing for weird immediate mode (courtesy of Yann).
 | 
				
			||||||
      <li>Bugfix: Special registers for address mode matching only worked with lower case register names (courtesy of Yann).
 | 
					      <li>Bugfix: Special registers for address mode matching only worked with lower case register names (courtesy of Yann).
 | 
				
			||||||
      <li>Enhancement: Assembler syntax with implicit immediate 1 for shifts and rotations no longer cause syntax errors (courtesy of Yann).
 | 
					      <li>Enhancement: Assembler syntax with implicit immediate 1 for shifts and rotations no longer cause syntax errors (courtesy of Yann).
 | 
				
			||||||
 | 
					      <li>Enhancement: Documentation for instruction with special register shows specific register expected.
 | 
				
			||||||
    </ul>
 | 
					    </ul>
 | 
				
			||||||
  <h4>V0.6 (09-Aug-21)</h4>
 | 
					  <h4>V0.6 (09-Aug-21)</h4>
 | 
				
			||||||
    <ul>
 | 
					    <ul>
 | 
				
			||||||
 | 
				
			|||||||
@ -92,8 +92,8 @@ class M68kInstructionDocumentationProvider : AbstractDocumentationProvider() {
 | 
				
			|||||||
                val cellsPerRow = ArrayList<HtmlChunk>(3)
 | 
					                val cellsPerRow = ArrayList<HtmlChunk>(3)
 | 
				
			||||||
                cellsPerRow.add(contentBuilder.toFragment())
 | 
					                cellsPerRow.add(contentBuilder.toFragment())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (allowedAdrMode.op1 != null) cellsPerRow.add(collectAddressModes(allowedAdrMode.op1))
 | 
					                if (allowedAdrMode.op1 != null) cellsPerRow.add(collectAddressModes(allowedAdrMode.op1, allowedAdrMode.specialReg))
 | 
				
			||||||
                if (allowedAdrMode.op1 != null) cellsPerRow.add(collectAddressModes(allowedAdrMode.op2))
 | 
					                if (allowedAdrMode.op1 != null) cellsPerRow.add(collectAddressModes(allowedAdrMode.op2, allowedAdrMode.specialReg))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                addressModeInfoRows.append(HtmlChunk.tag("tr").children(cellsPerRow.map { it.wrapWith(DocumentationMarkup.SECTION_CONTENT_CELL) }))
 | 
					                addressModeInfoRows.append(HtmlChunk.tag("tr").children(cellsPerRow.map { it.wrapWith(DocumentationMarkup.SECTION_CONTENT_CELL) }))
 | 
				
			||||||
                addressModeInfoRows.toFragment()
 | 
					                addressModeInfoRows.toFragment()
 | 
				
			||||||
@ -126,11 +126,12 @@ class M68kInstructionDocumentationProvider : AbstractDocumentationProvider() {
 | 
				
			|||||||
        return defBuilder
 | 
					        return defBuilder
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private fun collectAddressModes(addressModes: Set<AddressMode>?): HtmlChunk {
 | 
					    private fun collectAddressModes(addressModes: Set<AddressMode>?, specialReg: String?): HtmlChunk {
 | 
				
			||||||
        if (addressModes == null) return HtmlChunk.text("")
 | 
					        if (addressModes == null) return HtmlChunk.text("")
 | 
				
			||||||
        val modes = HtmlBuilder()
 | 
					        val modes = HtmlBuilder()
 | 
				
			||||||
        addressModes.sortedBy(AddressMode::ordinal)
 | 
					        addressModes.sortedBy(AddressMode::ordinal)
 | 
				
			||||||
            .forEach { modes.append(HtmlChunk.text(it.syntax).wrapWith(HtmlChunk.div())) }
 | 
					            .map { if (it == AddressMode.SPECIAL_REGISTER_DIRECT) specialReg!! else it.syntax }
 | 
				
			||||||
 | 
					            .forEach { modes.append(HtmlChunk.text(it).wrapWith(HtmlChunk.div())) }
 | 
				
			||||||
        return modes.toFragment()
 | 
					        return modes.toFragment()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -108,6 +108,16 @@ internal class M68kInstructionDocumentationProviderTest : AbstractDocumentationP
 | 
				
			|||||||
        assertThat(generateDocumentation(myFixture)).contains("Reset External Devices", "(privileged)")
 | 
					        assertThat(generateDocumentation(myFixture)).contains("Reset External Devices", "(privileged)")
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    internal fun check_documentation_for_instruction_with_special_register(@MyFixture myFixture: CodeInsightTestFixture) {
 | 
				
			||||||
 | 
					        myFixture.configureByText(
 | 
				
			||||||
 | 
					            "documentme.asm", """
 | 
				
			||||||
 | 
					 <caret>move.l usp,a0
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        assertThat(generateDocumentation(myFixture)).contains("<div>usp</div>")
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    internal fun check_documentation_if_there_is_no_concrete_match(@MyFixture myFixture: CodeInsightTestFixture) {
 | 
					    internal fun check_documentation_if_there_is_no_concrete_match(@MyFixture myFixture: CodeInsightTestFixture) {
 | 
				
			||||||
        myFixture.configureByText(
 | 
					        myFixture.configureByText(
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user