@@ -177,7 +177,7 @@ func (i *javascriptIndexer) IndexDir(ctx context.Context, dir string) (*schema.I
177
177
className := firstCaptureContentOr (content , captures ["class_name" ], "" )
178
178
superClasses := firstCaptureContentOr (content , captures ["superclasses" ], "" )
179
179
classDocs := firstCaptureContentOr (content , captures ["class_docs" ], "\n " )
180
- classDocs = sanitizeDocs (classDocs )
180
+ classDocs = extractClassDocs (classDocs )
181
181
182
182
classLabel := schema .Markdown ("class " + className + superClasses )
183
183
classes := classesByMod [modName ]
@@ -317,80 +317,149 @@ func getFunctions(node *sitter.Node, content []byte, q string, searchKeyPrefix [
317
317
return functions , nil
318
318
}
319
319
320
- func extractFunctionDocs (s string ) string {
320
+ func extractClassDocs (s string ) string {
321
321
// JSDoc comments must start with a /**
322
322
// sequence in order to be recognized by the JSDoc parser.
323
323
// Comments beginning with /*, /***, or more than 3 stars are ignored by Jsdoc Parser.
324
- if strings .HasPrefix (s , "/**" ) && ! strings .HasPrefix (s , "/***" ) {
325
- comment := []byte (s )
326
- funcDocs := ""
327
- node , err := sitter .ParseCtx (context .Background (), comment , jsdoc .GetLanguage ())
328
- if err != nil {
329
- return ""
324
+ if ! strings .HasPrefix (s , "/**" ) && strings .HasPrefix (s , "/***" ) {
325
+ return sanitizeDocs (s )
326
+ }
327
+
328
+ comment := []byte (s )
329
+ classDocs := ""
330
+ node , err := sitter .ParseCtx (context .Background (), comment , jsdoc .GetLanguage ())
331
+ if err != nil {
332
+ return ""
333
+ }
334
+ query , err := sitter .NewQuery ([]byte (`
335
+ (document
336
+ (description)? @class_description
337
+ (tag
338
+ (tag_name)? @tag_name
339
+ (type)? @identifier_type
340
+ (identifier)? @identifier_name
341
+ (description)? @identifier_description
342
+ )
343
+ )*
344
+ ` ), jsdoc .GetLanguage ())
345
+ if err != nil {
346
+ return ""
347
+ }
348
+
349
+ defer query .Close ()
350
+
351
+ cursor := sitter .NewQueryCursor ()
352
+ defer cursor .Close ()
353
+ cursor .Exec (query , node )
354
+
355
+ propertiesSection := ""
356
+ for {
357
+ match , ok := cursor .NextMatch ()
358
+ if ! ok {
359
+ break
330
360
}
331
- query , err := sitter .NewQuery ([]byte (`
332
- (document
333
- (description)? @func_description
334
- (tag
335
- (tag_name)? @tag_name
336
- (type)? @identifier_type
337
- (identifier)? @identifier_name
338
- (description)? @identifier_description
339
- )
340
- )*
341
- ` ), jsdoc .GetLanguage ())
342
- if err != nil {
343
- return ""
361
+ captures := getCaptures (query , match )
362
+ classDescription := firstCaptureContentOr (comment , captures ["class_description" ], "" )
363
+ classDocs = fmt .Sprintf ("%s\n " , classDescription )
364
+
365
+ identifierType := firstCaptureContentOr (comment , captures ["identifier_type" ], "" )
366
+ if identifierType != "" {
367
+ identifierType = fmt .Sprintf (" (%s)" , identifierType )
368
+ }
369
+ identifierName := firstCaptureContentOr (comment , captures ["identifier_name" ], "" )
370
+ identifierDescription := firstCaptureContentOr (comment , captures ["identifier_description" ], "" )
371
+ if identifierDescription != "" {
372
+ identifierDescription = fmt .Sprintf (": %s" , identifierDescription )
344
373
}
345
374
346
- defer query .Close ()
375
+ tagName := firstCaptureContentOr (comment , captures ["tag_name" ], "" )
376
+ switch tagName {
377
+ case "@property" :
378
+ propertiesSection += fmt .Sprintf ("\n \t %s%s%s" , identifierName , identifierType , identifierDescription )
379
+ }
380
+ }
347
381
348
- cursor := sitter . NewQueryCursor ()
349
- defer cursor . Close ( )
350
- cursor . Exec ( query , node )
382
+ if len ( propertiesSection ) > 0 {
383
+ classDocs += fmt . Sprintf ( " \n Properties: \n %s" , propertiesSection )
384
+ }
351
385
352
- argsSection := ""
353
- returnSection := ""
354
- for {
355
- match , ok := cursor .NextMatch ()
356
- if ! ok {
357
- break
358
- }
359
- captures := getCaptures (query , match )
360
- funcDescription := firstCaptureContentOr (comment , captures ["func_description" ], "" )
361
- funcDocs = fmt .Sprintf ("%s\n " , funcDescription )
386
+ return classDocs
387
+ }
362
388
363
- identifierType := firstCaptureContentOr (comment , captures ["identifier_type" ], "" )
364
- if identifierType != "" {
365
- identifierType = fmt .Sprintf (" (%s)" , identifierType )
366
- }
367
- identifierName := firstCaptureContentOr (comment , captures ["identifier_name" ], "" )
368
- identifierDescription := firstCaptureContentOr (comment , captures ["identifier_description" ], "" )
369
- if identifierDescription != "" {
370
- identifierDescription = fmt .Sprintf (": %s" , identifierDescription )
371
- }
389
+ func extractFunctionDocs (s string ) string {
390
+ // JSDoc comments must start with a /**
391
+ // sequence in order to be recognized by the JSDoc parser.
392
+ // Comments beginning with /*, /***, or more than 3 stars are ignored by Jsdoc Parser.
393
+ if ! strings .HasPrefix (s , "/**" ) && strings .HasPrefix (s , "/***" ) {
394
+ return sanitizeDocs (s )
395
+ }
372
396
373
- tagName := firstCaptureContentOr (comment , captures ["tag_name" ], "" )
374
- switch tagName {
375
- case "@param" :
376
- argsSection += fmt .Sprintf ("\n \t %s%s%s" , identifierName , identifierType , identifierDescription )
377
- case "@return" :
378
- returnSection += fmt .Sprintf ("\n \t %s%s%s" , identifierName , identifierType , identifierDescription )
379
- }
397
+ comment := []byte (s )
398
+ funcDocs := ""
399
+ node , err := sitter .ParseCtx (context .Background (), comment , jsdoc .GetLanguage ())
400
+ if err != nil {
401
+ return ""
402
+ }
403
+ query , err := sitter .NewQuery ([]byte (`
404
+ (document
405
+ (description)? @func_description
406
+ (tag
407
+ (tag_name)? @tag_name
408
+ (type)? @identifier_type
409
+ (identifier)? @identifier_name
410
+ (description)? @identifier_description
411
+ )
412
+ )*
413
+ ` ), jsdoc .GetLanguage ())
414
+ if err != nil {
415
+ return ""
416
+ }
417
+
418
+ defer query .Close ()
419
+
420
+ cursor := sitter .NewQueryCursor ()
421
+ defer cursor .Close ()
422
+ cursor .Exec (query , node )
423
+
424
+ argsSection := ""
425
+ returnSection := ""
426
+ for {
427
+ match , ok := cursor .NextMatch ()
428
+ if ! ok {
429
+ break
380
430
}
431
+ captures := getCaptures (query , match )
432
+ funcDescription := firstCaptureContentOr (comment , captures ["func_description" ], "" )
433
+ funcDocs = fmt .Sprintf ("%s\n " , funcDescription )
381
434
382
- if len (argsSection ) > 0 {
383
- funcDocs += fmt .Sprintf ("\n Arguments:\n %s" , argsSection )
435
+ identifierType := firstCaptureContentOr (comment , captures ["identifier_type" ], "" )
436
+ if identifierType != "" {
437
+ identifierType = fmt .Sprintf (" (%s)" , identifierType )
438
+ }
439
+ identifierName := firstCaptureContentOr (comment , captures ["identifier_name" ], "" )
440
+ identifierDescription := firstCaptureContentOr (comment , captures ["identifier_description" ], "" )
441
+ if identifierDescription != "" {
442
+ identifierDescription = fmt .Sprintf (": %s" , identifierDescription )
384
443
}
385
444
386
- if len (returnSection ) > 0 {
387
- funcDocs += fmt .Sprintf ("\n Returns:\n %s" , returnSection )
445
+ tagName := firstCaptureContentOr (comment , captures ["tag_name" ], "" )
446
+ switch tagName {
447
+ case "@param" :
448
+ argsSection += fmt .Sprintf ("\n \t %s%s%s" , identifierName , identifierType , identifierDescription )
449
+ case "@return" :
450
+ returnSection += fmt .Sprintf ("\n \t %s%s%s" , identifierName , identifierType , identifierDescription )
388
451
}
452
+ }
453
+
454
+ if len (argsSection ) > 0 {
455
+ funcDocs += fmt .Sprintf ("\n Arguments:\n %s" , argsSection )
456
+ }
389
457
390
- return funcDocs
458
+ if len (returnSection ) > 0 {
459
+ funcDocs += fmt .Sprintf ("\n Returns:\n %s" , returnSection )
391
460
}
392
461
393
- return sanitizeDocs ( s )
462
+ return funcDocs
394
463
}
395
464
396
465
func sanitizeDocs (s string ) string {
0 commit comments