Skip to content
This repository was archived by the owner on Mar 1, 2022. It is now read-only.

Commit e62fa18

Browse files
committed
Added range to dscanner.DefinitionElement
1 parent fa630f8 commit e62fa18

1 file changed

Lines changed: 42 additions & 19 deletions

File tree

source/workspaced/com/dscanner.d

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,8 @@ struct DefinitionElement
243243
string type;
244244
///
245245
string[string] attributes;
246+
///
247+
int[2] range;
246248
}
247249

248250
private:
@@ -314,7 +316,8 @@ final class DefinitionFinder : ASTVisitor
314316
{
315317
override void visit(const ClassDeclaration dec)
316318
{
317-
definitions ~= makeDefinition(dec.name.text, dec.name.line, "c", context);
319+
definitions ~= makeDefinition(dec.name.text, dec.name.line, "c", context,
320+
[cast(int) dec.structBody.startLocation, cast(int) dec.structBody.endLocation]);
318321
auto c = context;
319322
context = ContextType(["class" : dec.name.text], "public");
320323
dec.accept(this);
@@ -328,7 +331,8 @@ final class DefinitionFinder : ASTVisitor
328331
dec.accept(this);
329332
return;
330333
}
331-
definitions ~= makeDefinition(dec.name.text, dec.name.line, "s", context);
334+
definitions ~= makeDefinition(dec.name.text, dec.name.line, "s", context,
335+
[cast(int) dec.structBody.startLocation, cast(int) dec.structBody.endLocation]);
332336
auto c = context;
333337
context = ContextType(["struct" : dec.name.text], "public");
334338
dec.accept(this);
@@ -337,7 +341,8 @@ final class DefinitionFinder : ASTVisitor
337341

338342
override void visit(const InterfaceDeclaration dec)
339343
{
340-
definitions ~= makeDefinition(dec.name.text, dec.name.line, "i", context);
344+
definitions ~= makeDefinition(dec.name.text, dec.name.line, "i", context,
345+
[cast(int) dec.structBody.startLocation, cast(int) dec.structBody.endLocation]);
341346
auto c = context;
342347
context = ContextType(["interface:" : dec.name.text], context.access);
343348
dec.accept(this);
@@ -346,7 +351,8 @@ final class DefinitionFinder : ASTVisitor
346351

347352
override void visit(const TemplateDeclaration dec)
348353
{
349-
auto def = makeDefinition(dec.name.text, dec.name.line, "T", context);
354+
auto def = makeDefinition(dec.name.text, dec.name.line, "T", context,
355+
[cast(int) dec.startLocation, cast(int) dec.endLocation]);
350356
def.attributes["signature"] = paramsToString(dec);
351357
definitions ~= def;
352358
auto c = context;
@@ -357,7 +363,9 @@ final class DefinitionFinder : ASTVisitor
357363

358364
override void visit(const FunctionDeclaration dec)
359365
{
360-
auto def = makeDefinition(dec.name.text, dec.name.line, "f", context);
366+
auto def = makeDefinition(dec.name.text, dec.name.line, "f", context,
367+
[cast(int) dec.functionBody.blockStatement.startLocation,
368+
cast(int) dec.functionBody.blockStatement.endLocation]);
361369
def.attributes["signature"] = paramsToString(dec);
362370
if (dec.returnType !is null)
363371
def.attributes["return"] = astToString(dec.returnType);
@@ -366,19 +374,24 @@ final class DefinitionFinder : ASTVisitor
366374

367375
override void visit(const Constructor dec)
368376
{
369-
auto def = makeDefinition("this", dec.line, "f", context);
377+
auto def = makeDefinition("this", dec.line, "f", context,
378+
[cast(int) dec.functionBody.blockStatement.startLocation,
379+
cast(int) dec.functionBody.blockStatement.endLocation]);
370380
def.attributes["signature"] = paramsToString(dec);
371381
definitions ~= def;
372382
}
373383

374384
override void visit(const Destructor dec)
375385
{
376-
definitions ~= makeDefinition("~this", dec.line, "f", context);
386+
definitions ~= makeDefinition("~this", dec.line, "f", context,
387+
[cast(int) dec.functionBody.blockStatement.startLocation,
388+
cast(int) dec.functionBody.blockStatement.endLocation]);
377389
}
378390

379391
override void visit(const EnumDeclaration dec)
380392
{
381-
definitions ~= makeDefinition(dec.name.text, dec.name.line, "g", context);
393+
definitions ~= makeDefinition(dec.name.text, dec.name.line, "g", context,
394+
[cast(int) dec.enumBody.startLocation, cast(int) dec.enumBody.endLocation]);
382395
auto c = context;
383396
context = ContextType(["enum" : dec.name.text], context.access);
384397
dec.accept(this);
@@ -392,7 +405,8 @@ final class DefinitionFinder : ASTVisitor
392405
dec.accept(this);
393406
return;
394407
}
395-
definitions ~= makeDefinition(dec.name.text, dec.name.line, "u", context);
408+
definitions ~= makeDefinition(dec.name.text, dec.name.line, "u", context,
409+
[cast(int) dec.structBody.startLocation, cast(int) dec.structBody.endLocation]);
396410
auto c = context;
397411
context = ContextType(["union" : dec.name.text], context.access);
398412
dec.accept(this);
@@ -401,31 +415,36 @@ final class DefinitionFinder : ASTVisitor
401415

402416
override void visit(const AnonymousEnumMember mem)
403417
{
404-
definitions ~= makeDefinition(mem.name.text, mem.name.line, "e", context);
418+
definitions ~= makeDefinition(mem.name.text, mem.name.line, "e", context,
419+
[cast(int) mem.name.index, cast(int) mem.name.index + cast(int) mem.name.text.length]);
405420
}
406421

407422
override void visit(const EnumMember mem)
408423
{
409-
definitions ~= makeDefinition(mem.name.text, mem.name.line, "e", context);
424+
definitions ~= makeDefinition(mem.name.text, mem.name.line, "e", context,
425+
[cast(int) mem.name.index, cast(int) mem.name.index + cast(int) mem.name.text.length]);
410426
}
411427

412428
override void visit(const VariableDeclaration dec)
413429
{
414430
foreach (d; dec.declarators)
415-
definitions ~= makeDefinition(d.name.text, d.name.line, "v", context);
431+
definitions ~= makeDefinition(d.name.text, d.name.line, "v", context,
432+
[cast(int) d.name.index, cast(int) d.name.index + cast(int) d.name.text.length]);
416433
dec.accept(this);
417434
}
418435

419436
override void visit(const AutoDeclaration dec)
420437
{
421438
foreach (i; dec.parts.map!(a => a.identifier))
422-
definitions ~= makeDefinition(i.text, i.line, "v", context);
439+
definitions ~= makeDefinition(i.text, i.line, "v", context,
440+
[cast(int) i.index, cast(int) i.index + cast(int) i.text.length]);
423441
dec.accept(this);
424442
}
425443

426444
override void visit(const Invariant dec)
427445
{
428-
definitions ~= makeDefinition("invariant", dec.line, "v", context);
446+
definitions ~= makeDefinition("invariant", dec.line, "v", context,
447+
[cast(int) dec.index, cast(int) dec.blockStatement.endLocation]);
429448
}
430449

431450
override void visit(const ModuleDeclaration dec)
@@ -503,21 +522,24 @@ final class DefinitionFinder : ASTVisitor
503522
// Old style alias
504523
if (dec.declaratorIdentifierList)
505524
foreach (i; dec.declaratorIdentifierList.identifiers)
506-
definitions ~= makeDefinition(i.text, i.line, "a", context);
525+
definitions ~= makeDefinition(i.text, i.line, "a", context,
526+
[cast(int) i.index, cast(int) i.index + cast(int) i.text.length]);
507527
dec.accept(this);
508528
}
509529

510530
override void visit(const AliasInitializer dec)
511531
{
512-
definitions ~= makeDefinition(dec.name.text, dec.name.line, "a", context);
532+
definitions ~= makeDefinition(dec.name.text, dec.name.line, "a", context,
533+
[cast(int) dec.name.index, cast(int) dec.name.index + cast(int) dec.name.text.length]);
513534

514535
dec.accept(this);
515536
}
516537

517538
override void visit(const AliasThisDeclaration dec)
518539
{
519540
auto name = dec.identifier;
520-
definitions ~= makeDefinition(name.text, name.line, "a", context);
541+
definitions ~= makeDefinition(name.text, name.line, "a", context,
542+
[cast(int) name.index, cast(int) name.index + cast(int) name.text.length]);
521543

522544
dec.accept(this);
523545
}
@@ -529,12 +551,13 @@ final class DefinitionFinder : ASTVisitor
529551
DefinitionElement[] definitions;
530552
}
531553

532-
DefinitionElement makeDefinition(string name, size_t line, string type, ContextType context)
554+
DefinitionElement makeDefinition(string name, size_t line, string type,
555+
ContextType context, int[2] range)
533556
{
534557
string[string] attr = context.attr;
535558
if (context.access.length)
536559
attr["access"] = context.access;
537-
return DefinitionElement(name, cast(int) line, type, attr);
560+
return DefinitionElement(name, cast(int) line, type, attr, range);
538561
}
539562

540563
enum AccessState

0 commit comments

Comments
 (0)