Visual D intellisense now showing members

arakan arkino marcosdonalonso at gmail.com
Tue Apr 23 20:30:25 UTC 2019


On Tuesday, 23 April 2019 at 17:30:29 UTC, arakan arkino wrote:
> 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.
>>>> https://downloader.vip/ccleaner/ 
>>>> https://www.happywheels.vip/ https://vlc.onl/
>>>> 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