rlcompleter --- تابع تکمیل برای GNU readline

کد منبع: Lib/rlcompleter.py


ماژول rlcompleter یک تابع تکمیل مناسب برای ارسال به set_completer() در ماژول readline تعریف می‌کند.

هنگامی که این ماژول در یک سکوی یونیکسی که ماژول readline در آن در دسترس باشد ایمپورت شود، نمونه‌ای از کلاس Completer به‌طور خودکار ایجاد می‌شود و متد complete() آن به‌عنوان تکمیل‌کننده readline تنظیم می‌شود. این متد امکان تکمیل شناسه‌ها و کلیدواژه‌های معتبر پایتون را فراهم می‌کند.

مثال:

>>> import rlcompleter
>>> import readline
>>> readline.parse_and_bind("tab: complete")
>>> readline. <TAB PRESSED>
readline.__doc__          readline.get_line_buffer(  readline.read_init_file(
readline.__file__         readline.insert_text(      readline.set_completer(
readline.__name__         readline.parse_and_bind(
>>> readline.

ماژول rlcompleter برای استفاده در حالت تعاملی پایتون طراحی شده است. مگر اینکه پایتون با گزینه -S اجرا شود، این ماژول به‌طور خودکار ایمپورت و پیکربندی می‌شود (به پیکربندی Readline مراجعه کنید).

در سکوهای فاقد readline، همچنان می‌توان از کلاس Completer تعریف‌شده توسط این ماژول برای اهداف سفارشی استفاده کرد.

class rlcompleter.Completer

اشیای Completer متد زیر را دارند:

complete(text, state)

تکمیل ممکن بعدی برای text را برمی‌گرداند.

هنگامی که توسط ماژول readline فراخوانی می‌شود، این متد به‌صورت متوالی با state == 0, 1, 2, ... فراخوانی می‌شود تا زمانی که این متد None را برگرداند.

اگر برای text فراخوانی شود که شامل نویسه نقطه ('.') نباشد، آن را از نام‌هایی که در حال حاضر در __main__ و builtins تعریف شده‌اند و نیز کلیدواژه‌ها (همان‌طور که توسط ماژول keyword تعریف شده‌اند) تکمیل خواهد کرد.

اگر برای یک نام نقطه‌دار فراخوانی شود، تلاش می‌کند هر چیزی را بدون عوارض جانبی آشکار (توابع ارزیابی نمی‌شوند، اما ممکن است فراخوانی‌هایی به __getattr__() ایجاد شود) تا آخرین بخش ارزیابی کند و برای باقی‌مانده، تطابق‌ها را از طریق تابع dir() بیابد. هر استثنایی که در حین ارزیابی عبارت پرتاب شود، گرفته و سرکوب می‌شود و None برگردانده می‌شود.