@@ -165,7 +165,7 @@ rft_option
165165 这里面列出的名称仅对模块内部定义的名称有效,对于导入的名称无效
166166
167167 参数和局部变量总是会被重命名,这里列出的名称对参数和局部变量不起作用
168- * - rft_exclude_calls
168+ * - rft_exclude_funcs
169169 - 模式列表
170170 -
171171 - 这里面列出的函数名称,对应的参数都不进行重命名::
@@ -228,161 +228,163 @@ rft_option
228228 - "no" 不重名,也不记录到日志
229229 - "err" 报错退出
230230
231- 高级选项
232- ~~~~~~~~
231+ 该选项功能尚未实现
233232
234- - rft_str_keywords
233+ ..
234+ 下列选项为内部选项,
235235
236- 这种类型的规则可以重命名指定范围(模块,函数,工程)中的字符串常量,包括字典常量中的 Key,以及下标 Subscript 的 Key
236+ - rft_str_keywords
237237
238- 默认情况下,函数参数会全部重命名。例如:
238+ 这种类型的规则可以重命名指定范围(模块,函数,工程)中的字符串常量,包括字典常量中的 Key,以及下标 Subscript 的 Key
239239
240- .. code :: python
240+ 默认情况下,函数参数会全部重命名。例如:
241241
242- def show (a , b , / , c , d = 2 , * args , ** kwargs ):
243- ...
242+ .. code :: python
244243
245- # 重构之后
246- def pyarmor__1 (pyarmor__2 , pyarmor__3 , pyarmor__4 , pyarmor__5 = 2 , * pyarmor__6 , ** pyarmor__7 ):
247- ...
244+ def show (a , b , / , c , d = 2 , * args , ** kwargs ):
245+ ...
248246
249- 但是这样可能会导致调用函数的时候出现参数找不到的错误
247+ # 重构之后
248+ def pyarmor__1 (pyarmor__2 , pyarmor__3 , pyarmor__4 , pyarmor__5 = 2 , * pyarmor__6 , ** pyarmor__7 ):
249+ ...
250250
251- 因为函数调用的时候可能通过多种形式指定参数名称,例如
251+ 但是这样可能会导致调用函数的时候出现参数找不到的错误
252252
253- .. code :: python
253+ 因为函数调用的时候可能通过多种形式指定参数名称,例如
254254
255- # case 1: 这种情况会自动识别和处理
256- show(2 , 5 , c = 2 , d = 8 )
255+ .. code :: python
257256
258- # case 2: 参数名称在 dict 常量中
259- kwarg = { ' c' : 1 , ' d' : 3 }
260- show(1 , 9 , ** kwarg)
257+ # case 1: 这种情况会自动识别和处理
258+ show(2 , 5 , c = 2 , d = 8 )
261259
262- # case 3 : 参数名称在 subscript 中的字符串常量
263- kwarg[ ' c' ] = 8
264- show(1 , 10 , ** kwarg)
260+ # case 2 : 参数名称在 dict 常量中
261+ kwarg = { ' c' : 1 , ' d ' : 3 }
262+ show(1 , 9 , ** kwarg)
265263
266- # case 4: 参数是 dict 函数的关键字参数
267- kwarg = dict ( d = 6 )
268- show(1 , 10 , 5 , ** kwarg)
264+ # case 3: 参数名称在 subscript 中的字符串常量
265+ kwarg[ ' c ' ] = 8
266+ show(1 , 10 , ** kwarg)
269267
270- 默认情况下不会对字符串进行重命名,所以除了第一种情况外,其他情况都不会进行自动处理。重构后的代码如下:
268+ # case 4: 参数是 dict 函数的关键字参数
269+ kwarg = dict (d = 6 )
270+ show(1 , 10 , 5 , ** kwarg)
271271
272- .. code :: python
272+ 默认情况下不会对字符串进行重命名,所以除了第一种情况外,其他情况都不会进行自动处理。重构后的代码如下:
273273
274- # case 1: 这种情况会自动识别和处理
275- pyarmor__1(2 , 5 , pyarmor__4 = 2 , pyarmor__5 = 8 )
274+ .. code :: python
276275
277- # case 2: 字符串参数不会重构
278- pyarmor__10 = { ' c' : 1 , ' d' : 3 }
279- pyarmor__1(1 , 9 , ** pyarmor__10)
276+ # case 1: 这种情况会自动识别和处理
277+ pyarmor__1(2 , 5 , pyarmor__4 = 2 , pyarmor__5 = 8 )
280278
281- # case 3: 参数名称在 subscript 中的字符串常量
282- pyarmor__10[ ' c' ] = 8
283- pyarmor__1(1 , 10 , ** pyarmor__10)
279+ # case 2: 字符串参数不会重构
280+ pyarmor__10 = { ' c' : 1 , ' d ' : 3 }
281+ pyarmor__1(1 , 9 , ** pyarmor__10)
284282
285- # case 4: 参数是 dict 函数的关键字参数
286- pyarmor__10 = dict ( d = 6 )
287- pyarmor__1(1 , 10 , 5 , ** pyarmor__10)
283+ # case 3: 参数名称在 subscript 中的字符串常量
284+ pyarmor__10[ ' c ' ] = 8
285+ pyarmor__1(1 , 10 , ** pyarmor__10)
288286
289- 为了修改字符串中的关键字参数名称 `c ` 和 `d ` , 需要使用下面的命令增加规则::
287+ # case 4: 参数是 dict 函数的关键字参数
288+ pyarmor__10 = dict (d = 6 )
289+ pyarmor__1(1 , 10 , 5 , ** pyarmor__10)
290290
291- $ pyarmor env push rft_option:rft_str_keywords "fibo:show c d"
291+ 为了修改字符串中的关键字参数名称 ` c ` 和 ` d ` , 需要使用下面的命令增加规则::
292292
293- 这样重构之后会修改字符串和字典常量中关键字字符串,例如:
293+ $ pyarmor env push rft_option:rft_str_keywords "fibo:show c d"
294294
295- .. code :: python
295+ 这样重构之后会修改字符串和字典常量中关键字字符串,例如:
296296
297- # case 1: 这种情况会自动识别和处理
298- pyarmor__1(2 , 5 , pyarmor__4 = 2 , pyarmor__5 = 8 )
297+ .. code :: python
299298
300- # case 2: 字符串参数名称进行了重命名
301- pyarmor__10 = { ' pyarmor__4' : 1 , ' pyarmor__5' : 3 }
302- pyarmor__1(1 , 9 , ** pyarmor__10)
299+ # case 1: 这种情况会自动识别和处理
300+ pyarmor__1(2 , 5 , pyarmor__4 = 2 , pyarmor__5 = 8 )
303301
304- # case 3 : 字符串参数名称进行了重命名
305- pyarmor__10[ ' pyarmor__4' ] = 8
306- pyarmor__1(1 , 10 , ** pyarmor__10)
302+ # case 2 : 字符串参数名称进行了重命名
303+ pyarmor__10 = { ' pyarmor__4' : 1 , ' pyarmor__5 ' : 3 }
304+ pyarmor__1(1 , 9 , ** pyarmor__10)
307305
308- # case 4: dict 函数的关键字参数没有进行重命名
309- pyarmor__10 = dict ( d = 6 )
310- pyarmor__1(1 , 10 , 5 , ** pyarmor__10)
306+ # case 3: 字符串参数名称进行了重命名
307+ pyarmor__10[ ' pyarmor__4 ' ] = 8
308+ pyarmor__1(1 , 10 , ** pyarmor__10)
311309
312- 对于第四种情况,有两种处理方案
310+ # case 4: dict 函数的关键字参数没有进行重命名
311+ pyarmor__10 = dict (d = 6 )
312+ pyarmor__1(1 , 10 , 5 , ** pyarmor__10)
313313
314- 一是人工把原来的代码替换成为字典常量 ` { "key": value } ` ,例如:
314+ 对于第四种情况,有两种处理方案
315315
316- .. code :: python
316+ 一是人工把原来的代码替换成为字典常量 ` { "key": value } ` ,例如:
317317
318- # case 4: 参数是 dict 函数的关键字参数,需要替换成为字典常量
319- kwarg = {' d' : 6 } # kwarg = dict(d=6)
320- show(1 , 10 , 5 , ** kwarg)
318+ .. code :: python
321319
322- 二是不修改代码,而是使用下面的配置,不重名函数 show 的参数,例如::
320+ # case 4: 参数是 dict 函数的关键字参数,需要替换成为字典常量
321+ kwarg = {' d' : 6 } # kwarg = dict(d=6)
322+ show(1 , 10 , 5 , ** kwarg)
323323
324- $ pyarmor env rft_option:rft_exclude_args fibo::show
324+ 二是不修改代码,而是使用下面的配置,不重名函数 show 的参数,例如::
325325
326- 使用第二种方案重构之后,函数 show 仅 posonly, stararg 和 kwarg 会进行重命名,其他参数都保持不变,例如:
326+ $ pyarmor env rft_option:rft_exclude_args fibo::show
327327
328- .. code :: python
328+ 使用第二种方案重构之后,函数 show 仅 posonly, stararg 和 kwarg 会进行重命名,其他参数都保持不变,例如:
329329
330- # case 1:
331- pyarmor__1(2 , 5 , c = 2 , d = 8 )
330+ .. code :: python
332331
333- # case 2:
334- pyarmor__10 = { ' c' : 1 , ' d' : 3 }
335- pyarmor__1(1 , 9 , ** pyarmor__10)
332+ # case 1:
333+ pyarmor__1(2 , 5 , c = 2 , d = 8 )
336334
337- # case 3 :
338- pyarmor__10[ ' c' ] = 8
339- pyarmor__1(1 , 10 , ** pyarmor__10)
335+ # case 2 :
336+ pyarmor__10 = { ' c' : 1 , ' d ' : 3 }
337+ pyarmor__1(1 , 9 , ** pyarmor__10)
340338
341- # case 4 :
342- pyarmor__10 = dict ( d = 6 )
343- pyarmor__1(1 , 10 , 5 , ** pyarmor__10)
339+ # case 3 :
340+ pyarmor__10[ ' c ' ] = 8
341+ pyarmor__1(1 , 10 , ** pyarmor__10)
344342
345- - rft_get_setattr
343+ # case 4:
344+ pyarmor__10 = dict (d = 6 )
345+ pyarmor__1(1 , 10 , 5 , ** pyarmor__10)
346346
347- 是否重命名属性表达式 obj.attr 中属性名称是个难题,主要有两种情况
347+ - rft_get_setattr
348348
349- - obj 的类型未知
350- - obj 的类型已知,但是 attr 不存在于 obj 类型的属性表中
349+ 是否重命名属性表达式 obj.attr 中属性名称是个难题,主要有两种情况
351350
352- 因为 obj 的类型可能是动态变化的,所以到底是否重命名 attr 是个难题
351+ - obj 的类型未知
352+ - obj 的类型已知,但是 attr 不存在于 obj 类型的属性表中
353353
354- 还包括 setattr(obj, 'attr', value) 和 getattr( obj, ' attr') 等形式
354+ 因为 obj 的类型可能是动态变化的,所以到底是否重命名 attr 是个难题
355355
356- 一种解决方案是在脚本中使用 annotation 指定该变量的属性
356+ 还包括 setattr(obj, 'attr', value) 和 getattr(obj, 'attr') 等形式
357357
358- 另外一种解决方案是设置为遇到无法处理的情况下提示用户进行处理::
358+ 一种解决方案是在脚本中使用 annotation 指定该变量的属性
359359
360- $ pyarmor env set rft_option:on_unknown_attr ?
360+ 另外一种解决方案是设置为遇到无法处理的情况下提示用户进行处理::
361361
362- 这样在遇到不可识别的对象类型时候,Pyarmor 提示用户进行处理
362+ $ pyarmor env set rft_option:on_unknown_attr ?
363363
364- - 指定变量的类型
365- - 不进行命名,所有该对象的其他属性也不进行重命名
366- - 进行重命名,所有该对象的其他属性也重命名
364+ 这样在遇到不可识别的对象类型时候,Pyarmor 提示用户进行处理
367365
368- - rft_call_rules
366+ - 指定变量的类型
367+ - 不进行命名,所有该对象的其他属性也不进行重命名
368+ - 进行重命名,所有该对象的其他属性也重命名
369369
370- 列表,应用于函数调用语句,匹配模式的函数,调用中关键字参数均进行重命名::
370+ - rft_call_rules
371371
372- module:scope:attrs
372+ 列表,应用于函数调用语句,匹配模式的函数,调用中关键字参数均进行重命名::
373373
374- 其中 attrs 可以是如下的格式使用 "." 进行连接:
374+ module:scope:attrs
375375
376- - name
377- - name()
378- - name[]
376+ 其中 attrs 可以是如下的格式使用 "." 进行连接:
379377
380- 例如::
378+ - name
379+ - name()
380+ - name[]
381381
382- joker.card:Fibo.start:self.runner.run
382+ 例如::
383383
384- - rft_attr_rules
384+ joker.card:Fibo.start:self.runner.run
385385
386- 属性重命名规则,满足模式的属性链表进行重命名,模式的格式和 rft_call_rulers 相同::
386+ - rft_attr_rules
387387
388- module:scope:attrs
388+ 属性重命名规则,满足模式的属性链表进行重命名,模式的格式和 rft_call_rulers 相同::
389+
390+ module:scope:attrs
0 commit comments