@@ -5,7 +5,6 @@ import { MarkdownString, Uri } from "vscode";
55import { Cppdoc } from './hoverFromCppdoc' ;
66import { FELIX } from './hoverFelix' ;
77import { HoverFromMarkdown } from './hoverFromMarkdown' ;
8- import * as ast from "./ast/main" ;
98
109export enum keywordType {
1110 other = 0 ,
@@ -48,64 +47,50 @@ export class AsmHoverProvider implements vscode.HoverProvider {
4847 const docinfo = DocInfo . getDocInfo ( document ) ; //scan the document
4948 const line = docinfo . lines [ position . line ] ;
5049
51- const text = document . getText ( ) ;
52- const lexer = new ast . AssemblyLexer ( text ) ;
5350
54- const tokens = lexer . tokenize ( ) ;
51+ if ( range ) {
52+ const wordGet = document . getText ( range ) ;
53+ const wordLowCase = wordGet . toLowerCase ( ) ;
5554
56- for ( const token of tokens ) {
57- if ( token . line - 1 == position . line ) {
58- if ( position . character + 1 >= token . column && position . character + 1 < token . column + token . value . length ) {
59- const str = `${ token . value } ${ token . column } ${ position . character } ${ token . type } ` ;
60- return new vscode . Hover ( str ) ;
55+ if ( line && line . operator ?. includes ( wordGet ) ) {
56+ const h = await this . getHover ( wordGet , [ keywordType . instruction ] ) ;
57+ if ( h ) { return h ; }
58+ }
59+
60+ if ( line && line . operand ?. includes ( wordGet ) ) {
61+
62+ const md = new MarkdownString ( ) ;
63+ if ( info . isNumberStr ( wordLowCase ) ) {
64+ md . appendMarkdown ( info . getNumMsg ( wordLowCase ) ) ;
65+ return new vscode . Hover ( md ) ;
66+ }
67+
68+
69+ //hover for char
70+ let wordGet2 = wordGet ;
71+ if ( range . start . character > 0 && range . end . character - range . start . character === 1 ) {
72+ const range2 = new vscode . Range ( range . start . line , range . start . character - 1 , range . end . line , range . end . character + 1 ) ;
73+ wordGet2 = document . getText ( range2 ) ;
6174 }
75+ const char = / [ ' " ] ( .) [ ' " ] / . exec ( wordGet2 ) ;
76+ if ( char && line . operand ?. includes ( wordGet2 ) ) {
77+ md . appendMarkdown ( info . getcharMsg ( char [ 1 ] ) ) ;
78+ return new vscode . Hover ( md ) ;
79+ }
80+
81+ const h = await this . getHover ( wordGet , [ keywordType . operator , keywordType . register , keywordType . symbol ] ) ;
82+ if ( h ) { return h ; }
6283 }
63- }
6484
85+ const asmsymbol = docinfo . findSymbol ( wordGet ) ; //the word is a symbol?
86+ if ( asmsymbol ) {
87+ return new vscode . Hover ( asmsymbol . markdown ( ) ) ;
88+ }
6589
66- // if (range) {
67- // const wordGet = document.getText(range);
68- // const wordLowCase = wordGet.toLowerCase();
69-
70- // if (line && line.operator?.includes(wordGet)) {
71- // const h = await this.getHover(wordGet, [keywordType.instruction]);
72- // if (h) { return h; }
73- // }
74-
75- // if (line && line.operand?.includes(wordGet)) {
76-
77- // const md = new MarkdownString();
78- // if (info.isNumberStr(wordLowCase)) {
79- // md.appendMarkdown(info.getNumMsg(wordLowCase));
80- // return new vscode.Hover(md);
81- // }
82-
83-
84- // //hover for char
85- // let wordGet2=wordGet;
86- // if(range.start.character>0 && range.end.character-range.start.character===1){
87- // const range2=new vscode.Range(range.start.line,range.start.character-1,range.end.line,range.end.character+1);
88- // wordGet2=document.getText(range2);
89- // }
90- // const char = /['"](.)['"]/.exec(wordGet2);
91- // if (char && line.operand?.includes(wordGet2)) {
92- // md.appendMarkdown(info.getcharMsg(char[1]));
93- // return new vscode.Hover(md);
94- // }
95-
96- // const h = await this.getHover(wordGet, [keywordType.operator, keywordType.register, keywordType.symbol]);
97- // if (h) { return h; }
98- // }
99-
100- // const asmsymbol = docinfo.findSymbol(wordGet); //the word is a symbol?
101- // if (asmsymbol) {
102- // return new vscode.Hover(asmsymbol.markdown());
103- // }
104-
105- // const h = await this.getHover(wordGet, [keywordType.other, keywordType.directive, keywordType.register]);
106- // if (h) { return h; }
107- // }
108- // return undefined;
90+ const h = await this . getHover ( wordGet , [ keywordType . other , keywordType . directive , keywordType . register ] ) ;
91+ if ( h ) { return h ; }
92+ }
93+ return undefined ;
10994 }
11095
11196 public async getHover ( word : string , types : keywordType [ ] ) : Promise < vscode . Hover | undefined > {
0 commit comments