@@ -12,44 +12,52 @@ import * as TreeSitterUtils from '../tree-sitter/utils'
1212import { embeddedLanguageDocsManager } from './documents-manager'
1313import { type EmbeddedLanguageDoc , insertTextIntoEmbeddedLanguageDoc , initEmbeddedLanguageDoc } from './utils'
1414
15+ export const imports = [
16+ 'import bb' ,
17+ 'from bb import data_smart' ,
18+ 'd = data_smart.DataSmart()' ,
19+ 'from bb import event' ,
20+ 'e = event.Event()' ,
21+ 'e.data = d' ,
22+ 'import os' ,
23+ ''
24+ ] . join ( '\n' )
25+
1526export const generatePythonEmbeddedLanguageDoc = async ( textDocument : TextDocument ) : Promise < void > => {
1627 const analyzedDocument = analyzer . getAnalyzedDocument ( textDocument . uri )
1728 if ( analyzedDocument === undefined ) {
1829 return
1930 }
20- const imports = new Set < string > ( )
2131 const embeddedLanguageDoc = initEmbeddedLanguageDoc ( textDocument , 'python' )
2232 TreeSitterUtils . forEach ( analyzedDocument . tree . rootNode , ( node ) => {
2333 switch ( node . type ) {
2434 case 'python_function_definition' :
25- handlePythonFunctionDefinition ( node , embeddedLanguageDoc , imports )
35+ handlePythonFunctionDefinition ( node , embeddedLanguageDoc )
2636 return false
2737 case 'anonymous_python_function' :
28- handleAnonymousPythonFunction ( node , embeddedLanguageDoc , imports )
38+ handleAnonymousPythonFunction ( node , embeddedLanguageDoc )
2939 return false
3040 case 'inline_python' :
31- handleInlinePythonNode ( node , embeddedLanguageDoc , imports )
41+ handleInlinePythonNode ( node , embeddedLanguageDoc )
3242 return false
3343 default :
3444 return true
3545 }
3646 } )
37- if ( imports . size !== 0 ) {
38- insertTextIntoEmbeddedLanguageDoc ( embeddedLanguageDoc , 0 , 0 , [ ...imports ] . join ( '\n' ) + '\n' )
39- }
47+ insertTextIntoEmbeddedLanguageDoc ( embeddedLanguageDoc , 0 , 0 , imports )
4048 await embeddedLanguageDocsManager . saveEmbeddedLanguageDoc ( embeddedLanguageDoc )
4149}
4250
43- const handlePythonFunctionDefinition = ( node : SyntaxNode , embeddedLanguageDoc : EmbeddedLanguageDoc , imports : Set < string > ) : void => {
51+ const handlePythonFunctionDefinition = ( node : SyntaxNode , embeddedLanguageDoc : EmbeddedLanguageDoc ) : void => {
4452 insertTextIntoEmbeddedLanguageDoc ( embeddedLanguageDoc , node . startIndex , node . endIndex , node . text )
4553 node . children . forEach ( ( child ) => {
4654 if ( child . type === 'block' ) {
47- handleBlockNode ( child , embeddedLanguageDoc , imports )
55+ handleBlockNode ( child , embeddedLanguageDoc )
4856 }
4957 } )
5058}
5159
52- const handleAnonymousPythonFunction = ( node : SyntaxNode , embeddedLanguageDoc : EmbeddedLanguageDoc , imports : Set < string > ) : void => {
60+ const handleAnonymousPythonFunction = ( node : SyntaxNode , embeddedLanguageDoc : EmbeddedLanguageDoc ) : void => {
5361 insertTextIntoEmbeddedLanguageDoc ( embeddedLanguageDoc , node . startIndex , node . endIndex , node . text )
5462 node . children . forEach ( ( child ) => {
5563 switch ( child . type ) {
@@ -72,15 +80,15 @@ const handleAnonymousPythonFunction = (node: SyntaxNode, embeddedLanguageDoc: Em
7280 insertTextIntoEmbeddedLanguageDoc ( embeddedLanguageDoc , child . startIndex , child . endIndex , ' ' )
7381 break
7482 case 'block' :
75- handleBlockNode ( child , embeddedLanguageDoc , imports )
83+ handleBlockNode ( child , embeddedLanguageDoc )
7684 break
7785 default :
7886 break
7987 }
8088 } )
8189}
8290
83- const handleInlinePythonNode = ( inlinePythonNode : SyntaxNode , embeddedLanguageDoc : EmbeddedLanguageDoc , imports : Set < string > ) : void => {
91+ const handleInlinePythonNode = ( inlinePythonNode : SyntaxNode , embeddedLanguageDoc : EmbeddedLanguageDoc ) : void => {
8492 const openingNode = inlinePythonNode . child ( 0 )
8593 const pythonContentNode = inlinePythonNode . child ( 1 )
8694 const closingNode = inlinePythonNode . child ( 2 )
@@ -98,56 +106,13 @@ const handleInlinePythonNode = (inlinePythonNode: SyntaxNode, embeddedLanguageDo
98106 insertTextIntoEmbeddedLanguageDoc ( embeddedLanguageDoc , pythonContentNode . startIndex , pythonContentNode . startIndex , '\n' ) // prevent trailing spaces
99107 insertTextIntoEmbeddedLanguageDoc ( embeddedLanguageDoc , pythonContentNode . startIndex , pythonContentNode . endIndex , pythonContentNode . text )
100108 insertTextIntoEmbeddedLanguageDoc ( embeddedLanguageDoc , closingNode . startIndex , closingNode . endIndex , '\n' )
101- handleBlockNode ( pythonContentNode , embeddedLanguageDoc , imports )
109+ handleBlockNode ( pythonContentNode , embeddedLanguageDoc )
102110}
103111
104- const handleBlockNode = ( blockNode : SyntaxNode , embeddedLanguageDoc : EmbeddedLanguageDoc , imports : Set < string > ) : void => {
112+ const handleBlockNode = ( blockNode : SyntaxNode , embeddedLanguageDoc : EmbeddedLanguageDoc ) : void => {
105113 if ( blockNode . text === '' ) {
106114 insertTextIntoEmbeddedLanguageDoc ( embeddedLanguageDoc , blockNode . startIndex , blockNode . endIndex , '\n pass' )
107115 }
108- handleImports ( blockNode , imports )
109- }
110-
111- const handleImports = ( blockNode : SyntaxNode , imports : Set < string > ) : void => {
112- const importBb = ( bbNode : SyntaxNode ) : void => {
113- if ( bbNode . nextSibling ?. type === '.' && bbNode . nextNamedSibling ?. type === 'python_identifier' ) {
114- const importName = bbNode . nextNamedSibling . text
115- imports . add ( 'import bb' )
116- imports . add ( `from bb import ${ importName } ` )
117- imports . add ( `bb.${ importName } = ${ importName } ` )
118- }
119- }
120-
121- const importD = ( ) : void => {
122- imports . add ( 'from bb import data_smart' )
123- imports . add ( 'd = data_smart.DataSmart()' )
124- }
125-
126- const importE = ( ) : void => {
127- importD ( )
128- imports . add ( 'from bb import event' )
129- imports . add ( 'e = event.Event()' )
130- imports . add ( 'e.data = d' )
131- }
132-
133- const importOs = ( ) : void => {
134- imports . add ( 'import os' )
135- }
136-
137- TreeSitterUtils . forEach ( blockNode , ( child ) => {
138- if ( child . type === 'python_identifier' ) {
139- if ( child . text === 'bb' ) {
140- importBb ( child )
141- } else if ( child . text === 'd' ) {
142- importD ( )
143- } else if ( child . text === 'e' ) {
144- importE ( )
145- } else if ( child . text === 'os' ) {
146- importOs ( )
147- }
148- }
149- return true
150- } )
151116}
152117
153118const handleOverrideNode = ( overrideNode : SyntaxNode , embeddedLanguageDoc : EmbeddedLanguageDoc ) : void => {
0 commit comments