Visual D intellisense now showing members

arakan arkino marcosdonalonso at gmail.com
Tue Apr 23 17:30:29 UTC 2019


On Saturday, 9 June 2018 at 22:22:45 UTC, DigitalDesigns wrote:
> On Saturday, 9 June 2018 at 08:04:21 UTC, Rainer Schuetze wrote:
>>
>>
>> On 07/06/2018 00:45, DigitalDesigns wrote:
>>> I have the json being generated and in it, it shows any 
>>> members for intellisense(and even the debugger) except init, 
>>> sizeof, mangleof, stringof.
>>> 
>>> I did a simple test program and it does work but not in my 
>>> program. (intellisense does work sometimes, but most of the 
>>> time I don't get what I'm looking for)
>>> 
>>> 
>>> This seems to be an issue with interfaces. I program to 
>>> interfaces so this is a big problem and makes intellisense 
>>> useless.
>>> 
>>> 
>>> The problem seems to be the file key and that I auto generate 
>>> members!
>>
>> That's probably the problem.
>>
>> Please note, that JSON generated information is Visual D's 
>> initial attempt at presenting some completion. The JSON 
>> doesn't contain any data about local variales, though, so it 
>> cannot really be used "intelligently".
>
> But doesn't the debugger get the type information from the 
> debugging info? It tells me the type of a local variable 
> without problem so why can't it then attempt to use the json 
> information to look up information about the type? I don't see 
> why local variables would really cause any problems. Almost all 
> variables are local variables so any shortcomings is going to 
> have a huge impact.
>
>> Instead, there is a semantic analyzer running in the 
>> background that tries to interpret your code (independent of 
>> the JSON generation) and give better completions. Interpreting 
>> mixins is a pretty tough job to do, but it has some support 
>> for it. You have to enable it in the language options, though. 
>> Maybe you are lucky...
>
> Yes, I noticed, it crashes repeatedly at times.
>
>>
>>
>>> Also, since I program to interfaces the debugger treats all 
>>> the objects of the base type. Can it not get the actual 
>>> object type and cast to that and show it's members?
>>> 
>>> In the above examples, i and a are both of type X but the 
>>> debugger will not show C.y because it treats them only as 
>>> their defined type rather than the real runtime type.
>>> 
>>> Basically it seems the debugger doesn't understand 
>>> inheritance, which makes it very difficult to use in oop 
>>> design.
>>> 
>>> 
>>> i    0x00B31008    main.I
>>> a    0x00B31020    main.A
>>>      [main.C]    0x00B31020    main.C
>>> -        main.A    0x00B31020    main.A
>>>             object.Object    D0006: Error: Type resolve failed
>>>             main.I    0x00B31028    main.I
>>>                     x    1    double
>>>                y    0    int
>>>      object.Object    D0006: Error: Type resolve failed
>>>      main.I    0x00B31028    main.I
>>>      x    1    double
>>> 
>>> 
>>> That is the locals all expanded. note that all main.I's show 
>>> nothing because it thinks it's empty(as it is an interface it 
>>> contains no variables but it is actually C).
>>> 
>>> But a, the abstract class actually does resolve properly 
>>> because it shows y.
>>
>> The debugger understands class inheritence, but not 
>> interfaces. I'll have to see whether that's feasible.
>
> Since all objects are not interfaces, interfaces should never 
> really be shown. Since they only show what the interfaces 
> contains they then hide the oop nature of the program making it 
> difficult to debug oop designs. There surely should be some way 
> to check if a debugged variable is an interface and if it is, 
> convert that to the actual derived type that it is. This should 
> actually happen to all class types. It already does for 
> abstract classes, which are similar to interfaces.
>
> Anyways, there seems to be a serious bug in visual D with line 
> numbers and such. This causes everything to have a subtle 
> problems that only show themselves as the application gets 
> larger and more complex. It is hard to give any specifics 
> because I'd have to send you all my code.
>
>
> Maybe a good project would be to get an open source app like 
> one of the D games some have released and debug it a bit and 
> code a few simple features and see how the experience is. For 
> me, what I've noticed is that it's intellisense is basically 
> broke. The debugger is broke in some ways. File matching is 
> broke. Breakpoints are broke. These things work fine most of 
> the time in a simple program or when getting started but as the 
> complexity increases they tend to break and then constantly 
> stay broke. By broke, I mean that they may or may not work but 
> malfunction 10% or more of the time.
>
> Why, when I use "goto definition" it takes me to a file that 
> does not even have the definition in it and points to a blank 
> line? This is a bug. The debugger's information is wrong. 
> Something that does the look up here is buggy. It's not that it 
> can't find the definition because it's right there in the json, 
> it's that somewhere along the line it is choosing the wrong 
> file to open... as if it is getting the wrong index. It opens 
> up the correct line.
>
> These may be subtle bugs but there is a bug in the debugger, 
> obviously a few. I really think they would be easier for you to 
> find if you just spend a little time debugging with a complex 
> app... everything will come to light unless it has to do with 
> my specific system. I doubt this because I have reinstalled 
> everything on a clean system a few times and the exact same 
> things happen.

will only show foo(int, int) which can make it difficult 
sometimes.



More information about the Digitalmars-d-ide mailing list