[GSOC 2013] Code completion in the Basic IDE

Noel Power nopower at suse.com
Thu May 30 03:11:36 PDT 2013


On 29/05/13 15:47, Noel Power wrote:
> But... lets talk about this maybe tomorrow, we should meet up in 
> anycase to just even say hello. I will try to write some very rough 
> ideas of where to start with this, we can then discuss that in some 
> more detail
Ok so...

first think I would try to do is modify the compiler to accept a 
statement like

Dim aVariable as SomeType

Actually this is not so hard to do, the vba support already allows this 
( to a certain extent )

e.g. if you open a calc document, create a module in the document basic 
and insert

Option VBASupport 1

Sub Test
Dim aRange as Range
End

basic will happily accept that ( and compile without errors )

Best way to find out where that is handled is to do try the same code 
without the 'Option VBASupport 1' and trace back compile error ( slap a 
breakpoint in StarBASIC::CError and work back )

 From there you should be able to work out ( hopefully ) some place in 
the compiler where there will be some

if ( bVBA )
{
    // don't complain about Dim as SomeType
}

for the above ( if you have trouble tracking it down let me know )

You will need to conditionalize the same thing for experimental mode ( 
remember on IRC we discussed we need to limit the new functionality to 
only run when the experimental features are enabled ) see SvtMiscOptions 
( it has some method for telling if experimental mode is enabled or not )


One you have that sorted then hopefully I think the next step is to 
tweak the IDE so that you know what 'variables' have been declared via

'Dim aVariable as SomeType'
'Dim anotherVariable as SomeOtherType'

in the current procedure. You need to search around basctl for a 
suitable place to do that, I am pretty sure that the IDE already does a 
cheap and nasty parse of the source code each time that you type in the 
module window ( iirc it does this to update the list of procedures ( 
SbMethods ) that it is using ) I am hoping that in there you can do 
something similar to build a cache of the variable names -> variable types.

The next step would be again to hook into where the source is been 
updated ( when you type ) there must be some eventhandler doing that ( 
again you will need to search in the IDE code in basctl for that ) What 
I would like to see there is some code that detects a '.' being typed 
following one of the already identified variables. For the moment if you 
can just detect this scenario and when the '.' is typed and just dump ( 
all ) the methods ( to stdout/screen e.g. printf or whatever trace 
macros people use ) , then detect the following keystrokes and try and 
again dump to the terminal the best matches for the method. If you can 
get to this point then I think it is time to start looking at 
introducing a comboxbox to popup etc.

anyway the initial steps above I think are enough to start with and get 
you going

I think you already have a good idea of where we want to get to, anyway 
I gave a talk last year about this stuff, there is some highlevel detail 
and mockup etc. to be found in
slides 18-22 in 
http://conference.libreoffice.org/talks/content/sessions/049/files/basicidewhatsnewandmightbenewlater.pdf 
( and also there are some other ideas in there if this task proves to be 
too easy ( which it might do ) so don't worry, you won't run out of 
things to implement


thanks

Noel


More information about the LibreOffice mailing list