Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[BUG] Code highlighting VB.NET en <In>

Pagina: 1
Acties:

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11 13:15

Korben

() => {};

Topicstarter
De code highlighter voor VB.Net bevat een foutje. Het volgende stuk code wordt verkeerd gehighlight:

Visual Basic .NET:
1
Public Sub MethodA(<In> foo As Integer)

Hier zie je dus nu dat <In> (het attribuut InAttribute) als keyword wordt aangemerkt, wat onjuist is. Dit is overigens zo bij alle attributes, waar bijvoorbeeld een attribuut SubAttribute, waarbij het gebruik <Sub> wordt, wel is toegestaan, maar op dat moment geen keyword is.

Een correcte implementatie zou het volgende stuk code goed moeten highlighten:
Visual Basic .NET:
1
<As(foo As Object, (a > 5) And (b < 3)), In>

Waarbij de eerste As en In geen keywords zijn, de rest wel (As, Object en And).

[ Voor 37% gewijzigd door Korben op 13-10-2006 03:47 ]

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22-11 13:51

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 gokt dat de VB.Net implementatie nog geen ondersteuning heeft voor Generics :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

de VB.Net highlighter is inderdaad al wat jaartjes oud, en verder ben ik geen VB expert. Heb je toevallig een pagina waar deze syntax volledig beschreven staat?

Intentionally left blank


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22-11 13:51

gorgi_19

Kruimeltjes zijn weer op :9

crisp schreef op vrijdag 13 oktober 2006 @ 09:16:
de VB.Net highlighter is inderdaad al wat jaartjes oud, en verder ben ik geen VB expert. Heb je toevallig een pagina waar deze syntax volledig beschreven staat?
Kijk uit waar je om vraagt :P

http://www.microsoft.com/...4280403E6E&displaylang=en

Het document is 309 pagina's; volledig genoeg? :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11 13:15

Korben

() => {};

Topicstarter
gorgi_19 schreef op vrijdag 13 oktober 2006 @ 08:37:
* gorgi_19 gokt dat de VB.Net implementatie nog geen ondersteuning heeft voor Generics :P
Het zijn geen generics, het zijn attributen, iets wat al vanaf .NET 1.0 wordt ondersteund. Ik ben er overigens net achter gekomen dat het probleem ook bestaat bij de C# highlighter.

Attributen zijn... tja attributen voor bepaalde elementen, je kunt ze toepassen op een heleboel dingen, te weten:

• Assembly's/modules
• Classes/structs/interfaces
• Methods
• Delegates
• Enums
• Events/fields/properties
• Parameters
• Return values

Een attribute komt altijd vóór de definitie van een element, zoals getoond in het voorbeeld. Ik denk dat het het meest nauwkeurige (zonder een halve compiler te hoeven bouwen) is om voor alles buiten code (dus in definities, wat de enige plek is waar een attribute mag voorkomen) tussen < en > (of [ en ] voor C#) als attribute te beschouwen. En alles vóór ronde haakjes - () - als attribuutnaam te beschouwen, wat dus geen keyword is.

Om het nog iets moeilijker te maken, je mag ook een target voor je attribuut opgeven. Bij VB.Net is dit alleen Module of Assembly. Dat zijn dus weer wel keywords.

Bij C# zijn het er echter wat meer:
• assembly
• module
• type
• return
• method
• field
• event
• param

Wederom een voorbeeldje, van die targets:
Visual Basic .NET:
1
<Assembly: Public>

Hierbij is Assembly een target voor de attribute, wat dus wel een keyword is. De attribute in kwestie is echter de fictieve PublicAttribute, waardoor Public geen keyword meer is in dit geval.

Een voorbeeld van hetzelfde onder C#, inclusief wat allemaal verkeerd geparsed wordt:
C#:
1
2
3
4
5
6
[lock]
public class Foo
{
  [method: finally(bar as string)]
  public void Bar([static] int foobar);
}

[lock] refereert naar het fictieve attribute lockAttribute, en moet dus geen keyword zijn.
[method: finally(...)] is het fictieve attribute finallyAttribute, die getarget wordt op de method. Hierbij moet method dus wel een keyword zijn, maar finally niet. [static] refereert aan het (wederom) fictieve staticAttribute, en moet dus ook geen keyword zijn.

De link die gorgi_19 geeft is helaas wel de enige link naar de spec op het web, het zit niet meer 'in' de MSDN. Hier dan ook maar de link voor de specificatie van C#.

[ Voor 6% gewijzigd door Korben op 18-10-2006 12:21 ]

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Feit is dat onze vb.net en c# highlighters echt maar hele simpele highlighters zijn:

- komt het voor in een lijstje van bestaande keywords? -> keyword
- is het een identifier gevolgt door ( ? -> method
- bestaat het enkel uit cijfers? -> number
- bestaat het enkel uit 'name'-karakters? -> identifier
- etcetera

totaal niet context-aware dus

Intentionally left blank

Pagina: 1