2222from ros2node .api import get_absolute_node_name
2323from ros2node .api import get_node_names
2424from ros2node .api import NodeNameCompleter
25+ from ros2param .api import call_describe_parameters
26+ from ros2param .api import get_parameter_type_string
2527from ros2param .verb import VerbExtension
2628from ros2service .api import get_service_names
2729
@@ -41,6 +43,9 @@ def add_arguments(self, parser, cli_name): # noqa: D102
4143 parser .add_argument (
4244 '--param-prefixes' , nargs = '+' , default = [],
4345 help = 'Only list parameters with the provided prefixes' )
46+ parser .add_argument (
47+ '--param-type' , action = 'store_true' ,
48+ help = 'Print parameter types with parameter names' )
4449
4550 def main (self , * , args ): # noqa: D102
4651 with NodeStrategy (args ) as node :
@@ -96,8 +101,23 @@ def main(self, *, args): # noqa: D102
96101 if not args .node_name :
97102 print (f'{ node_name .full_name } :' )
98103 response = future .result ()
99- for name in sorted (response .result .names ):
100- print (f' { name } ' )
104+ sorted_names = sorted (response .result .names )
105+ # get descriptors for the node if needs to print parameter type
106+ name_to_type_map = {}
107+ if args .param_type is True :
108+ resp = call_describe_parameters (
109+ node = node , node_name = node_name .full_name ,
110+ parameter_names = sorted_names )
111+ for descriptor in resp .descriptors :
112+ name_to_type_map [descriptor .name ] = get_parameter_type_string (
113+ descriptor .type )
114+
115+ for name in sorted_names :
116+ if args .param_type is True :
117+ param_type_str = name_to_type_map [name ]
118+ print (f' { name } (type: { param_type_str } )' )
119+ else :
120+ print (f' { name } ' )
101121 else :
102122 e = future .exception ()
103123 print (
0 commit comments