Merge remote-tracking branch 'BenLubar/proto-docs' into develop
						commit
						06511340ab
					
				@ -0,0 +1,109 @@
 | 
				
			|||||||
 | 
					import glob
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					actual = {'': {}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					with open(sys.argv[1]) as f:
 | 
				
			||||||
 | 
					    plugin_name = ''
 | 
				
			||||||
 | 
					    for line in f:
 | 
				
			||||||
 | 
					        line = line.rstrip()
 | 
				
			||||||
 | 
					        if line.startswith('// Plugin: '):
 | 
				
			||||||
 | 
					            plugin_name = line.split(' ')[2]
 | 
				
			||||||
 | 
					            if plugin_name not in actual:
 | 
				
			||||||
 | 
					                actual[plugin_name] = {}
 | 
				
			||||||
 | 
					        elif line.startswith('// RPC '):
 | 
				
			||||||
 | 
					            parts = line.split(' ')
 | 
				
			||||||
 | 
					            actual[plugin_name][parts[2]] = (parts[4], parts[6])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					expected = {'': {}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for p in glob.iglob('library/proto/*.proto'):
 | 
				
			||||||
 | 
					    with open(p) as f:
 | 
				
			||||||
 | 
					        for line in f:
 | 
				
			||||||
 | 
					            line = line.rstrip()
 | 
				
			||||||
 | 
					            if line.startswith('// RPC '):
 | 
				
			||||||
 | 
					                parts = line.split(' ')
 | 
				
			||||||
 | 
					                expected[''][parts[2]] = (parts[4], parts[6])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for p in glob.iglob('plugins/proto/*.proto'):
 | 
				
			||||||
 | 
					    plugin_name = ''
 | 
				
			||||||
 | 
					    with open(p) as f:
 | 
				
			||||||
 | 
					        for line in f:
 | 
				
			||||||
 | 
					            line = line.rstrip()
 | 
				
			||||||
 | 
					            if line.startswith('// Plugin: '):
 | 
				
			||||||
 | 
					                plugin_name = line.split(' ')[2]
 | 
				
			||||||
 | 
					                if plugin_name not in expected:
 | 
				
			||||||
 | 
					                    expected[plugin_name] = {}
 | 
				
			||||||
 | 
					                break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if plugin_name == '':
 | 
				
			||||||
 | 
					        continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    with open(p) as f:
 | 
				
			||||||
 | 
					        for line in f:
 | 
				
			||||||
 | 
					            line = line.rstrip()
 | 
				
			||||||
 | 
					            if line.startswith('// RPC '):
 | 
				
			||||||
 | 
					                parts = line.split(' ')
 | 
				
			||||||
 | 
					                expected[plugin_name][parts[2]] = (parts[4], parts[6])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					error_count = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for plugin_name in actual:
 | 
				
			||||||
 | 
					    methods = actual[plugin_name]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if plugin_name not in expected:
 | 
				
			||||||
 | 
					        print('Missing documentation for plugin proto files: ' + plugin_name)
 | 
				
			||||||
 | 
					        print('Add the following lines:')
 | 
				
			||||||
 | 
					        print('// Plugin: ' + plugin_name)
 | 
				
			||||||
 | 
					        error_count += 1
 | 
				
			||||||
 | 
					        for m in methods:
 | 
				
			||||||
 | 
					            io = methods[m]
 | 
				
			||||||
 | 
					            print('// RPC ' + m + ' : ' + io[0] + ' -> ' + io[1])
 | 
				
			||||||
 | 
					            error_count += 1
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        missing = []
 | 
				
			||||||
 | 
					        wrong = []
 | 
				
			||||||
 | 
					        for m in methods:
 | 
				
			||||||
 | 
					            io = methods[m]
 | 
				
			||||||
 | 
					            if m in expected[plugin_name]:
 | 
				
			||||||
 | 
					                if expected[plugin_name][m] != io:
 | 
				
			||||||
 | 
					                    wrong.add('// RPC ' + m + ' : ' + io[0] + ' -> ' + io[1])
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                missing.add('// RPC ' + m + ' : ' + io[0] + ' -> ' + io[1])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if len(missing) > 0:
 | 
				
			||||||
 | 
					            print('Incomplete documentation for ' + ('core' if plugin_name == '' else 'plugin "' + plugin_name + '"') + ' proto files. Add the following lines:')
 | 
				
			||||||
 | 
					            for m in missing:
 | 
				
			||||||
 | 
					                print(m)
 | 
				
			||||||
 | 
					                error_count += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if len(wrong) > 0:
 | 
				
			||||||
 | 
					            print('Incorrect documentation for ' + ('core' if plugin_name == '' else 'plugin "' + plugin_name + '"') + ' proto files. Replace the following comments:')
 | 
				
			||||||
 | 
					            for m in wrong:
 | 
				
			||||||
 | 
					                print(m)
 | 
				
			||||||
 | 
					                error_count += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for plugin_name in expected:
 | 
				
			||||||
 | 
					    methods = expected[plugin_name]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if plugin_name not in actual:
 | 
				
			||||||
 | 
					        print('Incorrect documentation for plugin proto files: ' + plugin_name)
 | 
				
			||||||
 | 
					        print('The following methods are documented, but the plugin does not provide any RPC methods:')
 | 
				
			||||||
 | 
					        for m in methods:
 | 
				
			||||||
 | 
					            io = methods[m]
 | 
				
			||||||
 | 
					            print('// RPC ' + m + ' : ' + io[0] + ' -> ' + io[1])
 | 
				
			||||||
 | 
					            error_count += 1
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        missing = []
 | 
				
			||||||
 | 
					        for m in methods:
 | 
				
			||||||
 | 
					            io = methods[m]
 | 
				
			||||||
 | 
					            if m not in actual[plugin_name]:
 | 
				
			||||||
 | 
					                missing.add('// RPC ' + m + ' : ' + io[0] + ' -> ' + io[1])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if len(missing) > 0:
 | 
				
			||||||
 | 
					            print('Incorrect documentation for ' + ('core' if plugin_name == '' else 'plugin "' + plugin_name + '"') + ' proto files. Remove the following lines:')
 | 
				
			||||||
 | 
					            for m in missing:
 | 
				
			||||||
 | 
					                print(m)
 | 
				
			||||||
 | 
					                error_count += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sys.exit(min(100, error_count))
 | 
				
			||||||
@ -1,2 +1,4 @@
 | 
				
			|||||||
 | 
					devel/dump-rpc dfhack-rpc.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:lua dfhack.internal.addScriptPath(os.getenv('TRAVIS_BUILD_DIR'))
 | 
					:lua dfhack.internal.addScriptPath(os.getenv('TRAVIS_BUILD_DIR'))
 | 
				
			||||||
test/main
 | 
					test/main
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue