@@ -5,7 +5,6 @@ import { MarkdownString, Uri } from "vscode";
5
5
import { Cppdoc } from './hoverFromCppdoc' ;
6
6
import { FELIX } from './hoverFelix' ;
7
7
import { HoverFromMarkdown } from './hoverFromMarkdown' ;
8
- import * as ast from "./ast/main" ;
9
8
10
9
export enum keywordType {
11
10
other = 0 ,
@@ -48,64 +47,50 @@ export class AsmHoverProvider implements vscode.HoverProvider {
48
47
const docinfo = DocInfo . getDocInfo ( document ) ; //scan the document
49
48
const line = docinfo . lines [ position . line ] ;
50
49
51
- const text = document . getText ( ) ;
52
- const lexer = new ast . AssemblyLexer ( text ) ;
53
50
54
- const tokens = lexer . tokenize ( ) ;
51
+ if ( range ) {
52
+ const wordGet = document . getText ( range ) ;
53
+ const wordLowCase = wordGet . toLowerCase ( ) ;
55
54
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 ) ;
61
74
}
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 ; }
62
83
}
63
- }
64
84
85
+ const asmsymbol = docinfo . findSymbol ( wordGet ) ; //the word is a symbol?
86
+ if ( asmsymbol ) {
87
+ return new vscode . Hover ( asmsymbol . markdown ( ) ) ;
88
+ }
65
89
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 ;
109
94
}
110
95
111
96
public async getHover ( word : string , types : keywordType [ ] ) : Promise < vscode . Hover | undefined > {
0 commit comments