summary refs log blame commit diff stats
path: root/lib/pure/oswalkdir.nim
blob: 23ca0566a9cae96bfd29ff96011c999a6a6ceb42 (plain) (tree)
1
2
3
4
5
6
7
8
9







                                                   
 


                                                                       










                                                                          

                                                                                          
                








                                                                   
#
#
#            Nim's Runtime Library
#        (c) Copyright 2015 Andreas Rumpf
#
#    See the file "copying.txt", included in this
#    distribution, for details about the copyright.
#

## Compile-time only version for walkDir if you need it at compile-time
## for JavaScript.

type
  PathComponent* = enum   ## Enumeration specifying a path component.
    pcFile,               ## path refers to a file
    pcLinkToFile,         ## path refers to a symbolic link to a file
    pcDir,                ## path refers to a directory
    pcLinkToDir           ## path refers to a symbolic link to a directory

proc staticWalkDir(dir: string; relative: bool): seq[
                  tuple[kind: PathComponent, path: string]] =
  discard

iterator walkDir*(dir: string; relative=false): tuple[kind: PathComponent, path: string] =
  for k, v in items(staticWalkDir(dir, relative)):
    yield (k, v)

iterator walkDirRec*(dir: string, filter={pcFile, pcDir}): string =
  var stack = @[dir]
  while stack.len > 0:
    for k,p in walkDir(stack.pop()):
      if k in filter:
        case k
        of pcFile, pcLinkToFile: yield p
        of pcDir, pcLinkToDir: stack.add(p)