@@ -48,58 +48,64 @@ export class AsmHoverProvider implements vscode.HoverProvider {
48
48
const docinfo = DocInfo . getDocInfo ( document ) ; //scan the document
49
49
const line = docinfo . lines [ position . line ] ;
50
50
51
- const text = document . getText ( ) ;
52
- const { tokens, errors} = ast . tokenize ( text ) ;
53
- const pos = ast . lineAndColumnToPosition ( text , position . line , position . character ) ;
54
- for ( const token of tokens ) {
55
- if ( pos > token . position && pos < token . value . length + token . position ) {
56
- return new vscode . Hover ( JSON . stringify ( token ) ) ;
57
- }
58
- }
59
-
60
- if ( range ) {
61
- const wordGet = document . getText ( range ) ;
62
- const wordLowCase = wordGet . toLowerCase ( ) ;
63
-
64
- if ( line && line . operator ?. includes ( wordGet ) ) {
65
- const h = await this . getHover ( wordGet , [ keywordType . instruction ] ) ;
66
- if ( h ) { return h ; }
67
- }
68
-
69
- if ( line && line . operand ?. includes ( wordGet ) ) {
51
+ const text = document . getText ( ) ;
52
+ const lexer = new ast . AssemblyLexer ( text ) ;
70
53
71
- const md = new MarkdownString ( ) ;
72
- if ( info . isNumberStr ( wordLowCase ) ) {
73
- md . appendMarkdown ( info . getNumMsg ( wordLowCase ) ) ;
74
- return new vscode . Hover ( md ) ;
75
- }
76
-
54
+ const tokens = lexer . tokenize ( ) ;
77
55
78
- //hover for char
79
- let wordGet2 = wordGet ;
80
- if ( range . start . character > 0 && range . end . character - range . start . character === 1 ) {
81
- const range2 = new vscode . Range ( range . start . line , range . start . character - 1 , range . end . line , range . end . character + 1 ) ;
82
- wordGet2 = document . getText ( range2 ) ;
83
- }
84
- const char = / [ ' " ] ( .) [ ' " ] / . exec ( wordGet2 ) ;
85
- if ( char && line . operand ?. includes ( wordGet2 ) ) {
86
- md . appendMarkdown ( info . getcharMsg ( char [ 1 ] ) ) ;
87
- return new vscode . Hover ( md ) ;
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 ) ;
88
61
}
89
-
90
- const h = await this . getHover ( wordGet , [ keywordType . operator , keywordType . register , keywordType . symbol ] ) ;
91
- if ( h ) { return h ; }
92
62
}
63
+ }
93
64
94
- const asmsymbol = docinfo . findSymbol ( wordGet ) ; //the word is a symbol?
95
- if ( asmsymbol ) {
96
- return new vscode . Hover ( asmsymbol . markdown ( ) ) ;
97
- }
98
65
99
- const h = await this . getHover ( wordGet , [ keywordType . other , keywordType . directive , keywordType . register ] ) ;
100
- if ( h ) { return h ; }
101
- }
102
- return undefined ;
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;
103
109
}
104
110
105
111
public async getHover ( word : string , types : keywordType [ ] ) : Promise < vscode . Hover | undefined > {
0 commit comments