aboutsummaryrefslogtreecommitdiff
path: root/Tools/px4params/scanner.py
blob: b5a1af47c357c4da2e67061811bc4001f9652afd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import os
import re

class Scanner(object):
    """
    Traverses directory tree, reads all source files, and passes their contents
    to the Parser.
    """

    re_file_extension = re.compile(r'\.([^\.]+)$')

    def ScanDir(self, srcdir, parser):
        """
        Scans provided path and passes all found contents to the parser using
        parser.Parse method.
        """
        extensions = set(parser.GetSupportedExtensions())
        for dirname, dirnames, filenames in os.walk(srcdir):
            for filename in filenames:
                m = self.re_file_extension.search(filename)
                if m:
                    ext = m.group(1)
                    if ext in extensions:
                        path = os.path.join(dirname, filename)
                        self.ScanFile(path, parser)

    def ScanFile(self, path, parser):
        """
        Scans provided file and passes its contents to the parser using
        parser.Parse method.
        """
        with open(path, 'r') as f:
            contents = f.read()
        parser.Parse(contents)