Actually I'm getting pretty good code completion with pythonnet in
ptipython console or PTVS.
But for more complicated cases the dir() and .NET Reflection are very
useful.

The question related more to the IDE experience when the code is not
executed, but introspected by the IDE analyzer.

Here is a more detailed github issue if anyone wants to use the current
workarounds:

https://github.com/pythonnet/pythonnet/issues/255

On Tue, Mar 7, 2017 at 9:55 PM, Dave Hirschfeld <[email protected]> wrote:

>
> On Monday, 6 March 2017 06:17:32 UTC+10, Denis Akhiyarov wrote:
>>
>> I just tried adding this in rope_plugin.py, but code completion on live
>> .NET/CLR objects is still not working in IDE. In console it works of course.
>>
>> #TODO: The following preferences should be customizable in the future
>> ROPE_PREFS = {'ignore_syntax_errors': True,
>>               'ignore_bad_imports': True,
>>               'soa_followed_calls': 2,
>>               'extension_modules': ["clr"],
>>               }
>>
>>
>>
>>
>> On Sunday, March 5, 2017 at 1:57:25 PM UTC-6, Carlos Córdoba wrote:
>>>
>>> Hi Denis,
>>>
>>> We never managed to implement this change. Would you like to create a
>>> pull request for it?
>>>
>>>
>>> Cheers,
>>> Carlos
>>>
>>> El 05/03/17 a las 14:53, Denis Akhiyarov escribió:
>>>
>>> @lcorrigan were you able to get code completion for Python.NET with live
>>> objects in Spyder? If yes, can you share the changes that you made?
>>>
>>> For Spyder 3.0 I do not see this setting for extension_modules or
>>> ROPE_PREFS in spyderlib/widgets/sourcecode/codeeditor.py
>>>
>>> Thanks,
>>> Denis
>>>
>>> On Thursday, February 23, 2012 at 8:12:03 AM UTC-6, lcorrigan wrote:
>>>>
>>>> That worked great, thanks a bunch Carlos!
>>>
>>> --
>>>
>>>
> For a hacky workaround you can force introspection by iterating over the
> types in the assembly:
>
>
> In [1]: import clr
>
>
> In [2]: import System
>
>
> In [3]: clr.AddReference('System.Data')
>
> Out[3]: <System.Reflection.RuntimeAssembly at 0xd2de4e0>
>
> In [4]: dir(System.Data)
>
> Out[4]:
>
> ['__class__',
>
> '__delattr__',
>
> '__delete__',
>
> '__dir__',
>
> '__doc__',
>
> '__eq__',
>
> '__file__',
>
> '__format__',
>
> '__ge__',
>
> '__getattribute__',
>
> '__gt__',
>
> '__hash__',
>
> '__init__',
>
> '__le__',
>
> '__lt__',
>
> '__module__',
>
> '__name__',
>
> '__ne__',
>
> '__new__',
>
> '__reduce__',
>
> '__reduce_ex__',
>
> '__repr__',
>
> '__set__',
>
> '__setattr__',
>
> '__sizeof__',
>
> '__str__',
>
> '__subclasshook__']
>
>
> In [5]: def getattrdot(obj, name, *default):
>
>    ...:     first, *rest = name.split('.', 1)
>
>    ...:     obj = getattr(obj, first, *default)
>
>    ...:     if not rest:
>
>    ...:         return obj
>
>    ...:     return getattrdot(obj, *rest, *default)
>
>    ...:
>
>
> In [6]: def AddReference(name):
>
>    ...:     import clr
>
>    ...:     assembly = clr.AddReference(name)
>
>    ...:     pymodule = getattrdot(clr, name)
>
>    ...:     print("Loaded '{}'".format(name))
>
>    ...:     print("Introspecting types...")
>
>    ...:     for t in assembly.GetTypes():
>
>    ...:         getattr(pymodule, t.Name, None)
>
>    ...:
>
>
> In [7]: AddReference('System.Data')
>
> Loaded 'System.Data'
>
> Introspecting types...
>
>
> In [8]: dir(System.Data)
>
> Out[8]:
>
> ['AcceptRejectRule',
>
> 'CommandBehavior',
>
> 'CommandType',
>
> 'ConflictOption',
>
> 'ConnectionState',
>
> 'Constraint',
>
> 'ConstraintCollection',
>
> 'ConstraintException',
>
> 'DBConcurrencyException',
>
> 'DataColumn',
>
> 'DataColumnChangeEventArgs',
>
> 'DataColumnChangeEventHandler',
>
> 'DataColumnCollection',
>
> 'DataException',
>
> 'DataRelation',
>
> 'DataRelationCollection',
>
> 'DataRow',
>
> 'DataRowAction',
>
> 'DataRowBuilder',
>
> 'DataRowChangeEventArgs',
>
> 'DataRowChangeEventHandler',
>
> 'DataRowCollection',
>
> 'DataRowState',
>
> 'DataRowVersion',
>
> 'DataRowView',
>
> 'DataSet',
>
> 'DataSetDateTime',
>
> 'DataSetSchemaImporterExtension',
>
> 'DataSysDescriptionAttribute',
>
> 'DataTable',
>
> 'DataTableClearEventArgs',
>
> 'DataTableClearEventHandler',
>
> 'DataTableCollection',
>
> 'DataTableNewRowEventArgs',
>
> 'DataTableNewRowEventHandler',
>
> 'DataTableReader',
>
> 'DataView',
>
> 'DataViewManager',
>
> 'DataViewRowState',
>
> 'DataViewSetting',
>
> 'DataViewSettingCollection',
>
> 'DbType',
>
> 'DeletedRowInaccessibleException',
>
> 'DuplicateNameException',
>
> 'EvaluateException',
>
> 'FillErrorEventArgs',
>
> 'FillErrorEventHandler',
>
> 'ForeignKeyConstraint',
>
> 'IColumnMapping',
>
> 'IColumnMappingCollection',
>
> 'IDataAdapter',
>
> 'IDataParameter',
>
> 'IDataParameterCollection',
>
> 'IDataReader',
>
> 'IDataRecord',
>
> 'IDbCommand',
>
> 'IDbConnection',
>
> 'IDbDataAdapter',
>
> 'IDbDataParameter',
>
> 'IDbTransaction',
>
> 'ITableMapping',
>
> 'ITableMappingCollection',
>
> 'InRowChangingEventException',
>
> 'InternalDataCollectionBase',
>
> 'InvalidConstraintException',
>
> 'InvalidExpressionException',
>
> 'IsolationLevel',
>
> 'KeyRestrictionBehavior',
>
> 'LoadOption',
>
> 'MappingType',
>
> 'MergeFailedEventArgs',
>
> 'MergeFailedEventHandler',
>
> 'MissingMappingAction',
>
> 'MissingPrimaryKeyException',
>
> 'MissingSchemaAction',
>
> 'NoNullAllowedException',
>
> 'OperationAbortedException',
>
> 'ParameterDirection',
>
> 'PropertyAttributes',
>
> 'PropertyCollection',
>
> 'ReadOnlyException',
>
> 'RowNotInTableException',
>
> 'Rule',
>
> 'SchemaSerializationMode',
>
> 'SchemaType',
>
> 'SerializationFormat',
>
> 'SqlDbType',
>
> 'StateChangeEventArgs',
>
> 'StateChangeEventHandler',
>
> 'StatementCompletedEventArgs',
>
> 'StatementCompletedEventHandler',
>
> 'StatementType',
>
> 'StrongTypingException',
>
> 'SyntaxErrorException',
>
> 'TypedDataSetGenerator',
>
> 'TypedDataSetGeneratorException',
>
> 'UniqueConstraint',
>
> 'UpdateRowSource',
>
> 'UpdateStatus',
>
> 'VersionNotFoundException',
>
> 'XmlReadMode',
>
> 'XmlWriteMode',
>
> '__class__',
>
> '__delattr__',
>
> '__delete__',
>
> '__dir__',
>
> '__doc__',
>
> '__eq__',
>
> '__file__',
>
> '__format__',
>
> '__ge__',
>
> '__getattribute__',
>
> '__gt__',
>
> '__hash__',
>
> '__init__',
>
> '__le__',
>
> '__lt__',
>
> '__module__',
>
> '__name__',
>
> '__ne__',
>
> '__new__',
>
> '__reduce__',
>
> '__reduce_ex__',
>
> '__repr__',
>
> '__set__',
>
> '__setattr__',
>
> '__sizeof__',
>
> '__str__',
>
> '__subclasshook__']
>
>
> In [9]:
>
>
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "spyder" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/
> topic/spyderlib/pkymMOxVfLw/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/spyderlib.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"spyder" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/spyderlib.
For more options, visit https://groups.google.com/d/optout.

Reply via email to