Skip to content

Commit

Permalink
Suggest add flags field, only care deprecated pragma for now
Browse files Browse the repository at this point in the history
  • Loading branch information
bung87 committed Sep 12, 2023
1 parent 48eb265 commit c3f4144
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 1 deletion.
2 changes: 2 additions & 0 deletions compiler/ast/ast_parsed_types.nim
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,8 @@ const
pnkFloatKinds* = {pnkFloatLit..pnkFloat128Lit}
pnkIntKinds* = {pnkCharLit..pnkUInt64Lit}
pnkStrKinds* = {pnkStrLit..pnkTripleStrLit}
pnkDeclarativeDefs* = {pnkProcDef, pnkFuncDef, pnkMethodDef, pnkIteratorDef, pnkConverterDef}
pnkRoutineDefs* = pnkDeclarativeDefs + {pnkMacroDef, pnkTemplateDef}

func len*(node: ParsedNode): int =
## Number of sons of the parsed node
Expand Down
4 changes: 4 additions & 0 deletions compiler/front/options.nim
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,9 @@ type

CfileList* = seq[Cfile]

SuggestFlag* {.pure.} = enum
deprecated = 1

Suggest* = ref object
section*: IdeCmd
qualifiedPath*: seq[string]
Expand All @@ -158,6 +161,7 @@ type
scope*:int
localUsages*, globalUsages*: int # usage counters
tokenLen*: int
flags*: set[SuggestFlag]

Suggestions* = seq[Suggest]

Expand Down
6 changes: 5 additions & 1 deletion nimlsp/nimlsp.nim
Original file line number Diff line number Diff line change
Expand Up @@ -393,18 +393,22 @@ proc main(ins: Stream, outs: Stream) =
debugLog "Found outlines: ", syms[0..<min(syms.len, 10)],
if syms.len > 10: &" and {syms.len-10} more" else: ""
var resp: JsonNode
var flags = newSeq[int]()
if syms.len == 0:
resp = newJNull()
else:
resp = newJarray()
for sym in syms.sortedByIt((it.line,it.column,it.quality)):
if sym.qualifiedPath.len != 2:
continue
flags.setLen(0)
for f in sym.flags:
flags.add f.int
resp.add create(DocumentSymbol,
sym.qualifiedPath[^1],
some(sym.forth),
nimSymToLSPKind(sym.symKind).int,
none(seq[int]),
some(flags),
create(Range,
create(Position, sym.line-1, sym.column),
create(Position, sym.line-1, sym.column + sym.tokenLen)
Expand Down
15 changes: 15 additions & 0 deletions nimlsp/nimlsppkg/nimsuggest.nim
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,16 @@ proc getName(node: ParsedNode): string =
result.add t.ident.s
result.add "`"

proc processFlags(sug: Suggest; n: ParsedNode) =
var
identDeprecated: bool
colonDeprecated: bool
for s in n.sons:
identDeprecated = s.kind == pnkIdent and getName(s) == "deprecated"
colonDeprecated = s.kind == pnkExprColonExpr and getName(s[0]) == "deprecated"
if identDeprecated or colonDeprecated:
sug.flags.incl SuggestFlag.deprecated

proc parsedNodeToSugget(n: ParsedNode; moduleName: string): Suggest =
if n.kind in {pnkError, pnkEmpty}: return
if n.kind notin {pnkConstSection..pnkTypeDef, pnkIdentDefs}: return
Expand All @@ -179,6 +189,11 @@ proc parsedNodeToSugget(n: ParsedNode; moduleName: string): Suggest =
var name = ""

if n.kind in {pnkProcDef..pnkTypeDef, pnkIdentDefs}:
if n.kind in pnkRoutineDefs and n[pragmasPos].kind == pnkPragma:
processFlags(result, n[pragmasPos])
elif n[0].kind == pnkPragmaExpr and n[0][^1].kind == pnkPragma:
processFlags(result, n[0][^1])

var node: ParsedNode = getSymNode(n[0])
token = getToken(node)
if node.kind != pnkError:
Expand Down

0 comments on commit c3f4144

Please sign in to comment.