Ninja IDE: An IDE Designed for Python

Finally someone deigned to write an IDE like the folks for Python that any ordinary citizen can use without problems in Linux. Yes, there are several IDEs for programming in different languages, including Python, but this one has a few little tricks up its sleeve...

How did NINJA-IDE start?

NINJA-IDE It was born by some emails sent to PyAr, whose theme is usually heard quite frequently: "What good IDE for Python can I use?", "Why isn't there an IDE for Python that has this or that feature?", and the responses to these emails always end up being more or less the same, since the current IDEs that we find available, for the most part, were not designed for Python, but offered the option of incorporating it through a Plugin and in this way It used to be using very heavy IDEs designed for other purposes, where the support for Python was actually minimal, and those that were for Python ended up being very oriented to a specific Framework or were not Free. So, motivated by the challenge it represented, and by interesting ideas that were raised on the mailing list, we decided to approach this project by focusing on "What features should a good IDE have for a Python programmer".

With this in mind we began the development of NINJA-IDE, whose name is a derivative of the recursive acronym: "Ninja Is Not Just Another IDE". The IDE has barely more than two months of development, but thanks to the desire and hours of programming that we are dedicating to it, we can now have an IDE with many functionalities implemented, to the point of being able to continue with the development of NINJA- IDE using NINJA-IDE, which in turn helps us to find bugs and improve the usability and practicality of the application, through experience and continuous use of it.

The project is developed under a free GPL license and the code can be obtained through:

Some of the current features of the IDE are:

  • Typical functionalities of any IDE for handling files, Tabs, automatic indentation, Zoom in Editor, etc.
  • Being written in Python and using PyQt, it is cross-platform and was tested on Linux, MAC OS X, and Windows systems.
  • Syntax Highlighting for a wide variety of languages ​​(although it is Python-centric, it provides syntax highlighting for other languages ​​for the convenience of the programmer).
  • Possibility of using a Python Console from the same IDE.
  • It allows the management of Projects in the IDE, recognizing them as Python Projects and through the IDE creating new files and folders, deleting existing files, automatic creation of "__init__" files with the information within that module, etc.
  • It allows hiding and relocating all the interface panels in a very simple way, allowing it to be adapted to the user's tastes.
  • Allows you to view more than one Editor at the same time vertically or horizontally.
  • Extensible through the addition of Plugins (which can be created using a NINJA-IDE Plugin for simplicity).
  • It manages IDE sessions, to remember which files and projects were open when it was closed and recovers them when opening an instance of it again.
  • Support for Auto-completion (being a specific auto-completion of the object that is being accessed).
  • Automatic Updates.
  • And many more features!

Who develops NINJA-IDE?

NINJA-IDE began being developed by Santiago Moreno and Diego Sarmentero, and within 2 weeks of starting the project it was already being used to develop it. Thanks to the folks from the PyAr List, Blogs, etc. In a very short time, the dissemination of the project meant that we could be counting on Bugs Report by Users, Suggestions on the NINJA mailing list and even with code contributions by users and collaborators, of which some became part of NINJA-IDE with the role of commiters, as is the case of: Martín Alderete, Juan Cabral and Matías Herranz.

This strong collaboration and participation that we are receiving from the community allows NINJA-IDE to grow every day, improving and implementing features that users need. In turn, the comments we receive from people currently using NINJA-IDE, motivate us to continue working hard on this tool, with which we want to further simplify the development of Python applications.

How did you decide which features to add?

At the beginning of the project, a structure was thought that would allow it to grow and incorporate functionalities over time, having as a guide two main factors: the Code Editor and Project Management. The application began to be built taking care of these two fundamental pillars and allowing a good base of them to later facilitate the incorporation of new features. The project went through different stages, starting with a good editor with syntax highlighting, continuing with the management of project files, until adding plugin features, auto-completion, session management, etc. Python is often seen as a language that has greater difficulties in providing information about the code that is being written as it cannot inference from objects at the time of programming due to dynamic typing, etc.

In some cases, it is true that having an explicit typing can perform simpler and more detailed analyzes, but it is also true that currently there are many tools and libraries for Python that help to eliminate this taboo that it is not possible to have an IDE that provides real assistance on the code that is being generated. That is why NINJA-IDE seeks to allow those programmers who use Python to develop their programs, have the same facilities and aids that are obtained when developing in Java or .NET with some of the IDEs currently best known for those languages. Taking the results and experiences obtained from IDEs for other languages, it is intended to achieve an IDE designed for Python that generates the same satisfaction when using it.

For the suggestion, decision and incorporation of new features in NINJA-IDE, the mailing list is usually used to achieve a collective decision by the members that make up the project, more than anything to know what the objective of this feature will be, in what stage should be incorporated and other details. Many times these characteristics are motivated by some interesting functionality seen in another IDE, an idea from one of the members or suggestions from the user group. In this way, anyone, both user and developer, can propose what things they would like to see implemented in NINJA-IDE and based on the project architecture it can be defined if it is necessary to incorporate it as part of the IDE itself or as a plugin, allowing at the same time to know what ideas are being worked on and who take control of them to keep the work group synchronized.

What can we expect from NINJA-IDE?

NINJA-IDE was born to cover a need that seemed important to us, and we also saw that the current approaches to IDEs did not provide the necessary coverage.

Our intention when starting this project was to create an environment focused on the development of Python applications, but always taking into account the need to have a community of users that would allow us to improve the experience of using this tool, and currently makes us very happy to be able to count on the NINJA-IDE community, since thanks to the experience and collective knowledge of the users it is possible, that with their suggestions, the development of the project can advance faster and many more details are taken into account than from another shape could be overlooked.

Future plans

Currently with the continuous development that we are achieving, we are close to the release of version 1.0 of NINJA-IDE, which will receive the name 'Kunai'. In this first version several of the previously mentioned features will be present, which will allow the developer to have a robust and practical IDE, obviously, as in any project, improvements and new features will emerge to implement. Some of the things that are intended to be incorporated into NINJA-IDE in future versions are:

  • Graphic Debugger
  • To be able to see the navigability and relation of the modules and classes of a project graphically (based on BlueJ)
  • Support code versioning tools.
  • Allow collaborative editing of a document.
  • Qt and Gtk interface designer integrated in the IDE.
  • Frameworks support such as:
  • Django
  • Google App Engine
  • And this is just beginning!

What tools does NINJA-IDE use?

The IDE is developed using the PyQt framework for all the handling of the Graphical Interface and some other functionalities, although it was tried to abstract as much as possible certain functions to allow, if necessary tomorrow, to port NINJA-IDE to other frameworks such as Gtk. Qt allowed to have a solid and highly configurable interface, which made it possible to extend each necessary element to modify its behavior and adapt it to the needs of the IDE.

Regarding syntax highlighting, NINJA-IDE makes use of its own syntax highlighting system using Qt functionalities, and allowing this highlighting system to be easily extensible in NINJA-IDE with the creation of a simple JSON file that describes the language to be incorporated. This method provides improvements in performance, but to cover those languages ​​that are not recognized through this system, the use of Pygments was incorporated for syntax highlighting of a greater variety of languages. Although the possibility of Pygments being replaced by GNU Highlight for performance reasons is currently being raised.

For the auto-completion, refactoring, and those that refer to the code inference, Rope is used, which is an excellent library, very complete for this type of situation. Rope is a tool that allows to bring to an IDE for Python characteristics of IDEs of typed languages. Currently we are also working on the incorporation of Code Checking using the Pep8 library, precisely to provide information about the status of the code in relation to the Pep8 standards.

NINJA-IDE extensibility

NINJA-IDE has a fairly complete plugin system that allows the integration of these plugins as a native element of the IDE. Plugin writing is quite simple and you can even use a NINJA-IDE Plugin to write NINJA-IDE Plugins (recursive?). This Plugin «to write Plugins» allows you to decide with which parts of the IDE the new plugin is going to be related and automatically creates the necessary project structure, together with the Plugin descriptor so that NINJA-IDE can interpret it and the base class of This Plugin with the methods that will need to be reimplemented, in turn, when we finish writing the Plugin, it allows us to package it and then distribute it. Currently there are 3 Plugins for NINJA-IDE available:

  • Pastebin: which allows you to send code to pastebin.com and returns the resulting link to share that code.
  • PluginProject: the person in charge of creating Plugins projects for NINJA-IDE as we mentioned.
  • ClassCompleter: automatically completes some structures while writing Python code, such as: create the constructor automatically by calling the Parent Classes that are necessary, etc.

To consult more information about how to develop a Plugin for NINJA-IDE, you can visit the following Wiki: http://ninja-ide.org/plugins/

Contact

Download

Ninja IDE is now available in DEB and RPM packages. The rest of the world, of course, can always download the source code and compile it. 🙂

Thanks Diego Sarmentero for sharing this excellent IDE with all of us!

Leave a Comment

Your email address will not be published. Required fields are marked with *

*

*

  1. Responsible for the data: Miguel Ángel Gatón
  2. Purpose of the data: Control SPAM, comment management.
  3. Legitimation: Your consent
  4. Communication of the data: The data will not be communicated to third parties except by legal obligation.
  5. Data storage: Database hosted by Occentus Networks (EU)
  6. Rights: At any time you can limit, recover and delete your information.

  1.   Patrick Arguello said

    I really like PyCharm better. However good work congratulations and Regards. @patoargu

  2.   Richard3284 said

    Greetings to the community I am a fan of programming in python, the IDE is very good but on my computer I have Ubuntu 10.10 and I cannot work with the features that you see in figure 4, the image where the commands or classes or methods are shown From a python object, this feature is very important at least for me since not all commands are learned and at the same time it would allow us to learn more to programmers, but that functionality does not come out in my Ubuntu.

    I hope someone from the community can help me, my email is riccardo3284@gmail.com

  3.   marcoshipe said

    I read it wrong, the support for git is not yet implemented, but it is already a plugin that you plan to implement 🙂

  4.   Alex said

    ^^, I started as a member of the development team :), but in the end I didn't have the time or enough knowledge and I had to give it up :(. But I am very happy that in the end NInja IDE went ahead and with such good results.

  5.   marcoshipe said

    I already try it 😀
    hopefully this good, but since I use python and qt I like xD
    I guess he wipes eric, and I looked and it has support for git 😀 I think we're going to get along

  6.   Daniel said

    I think it's excellent, the only negative thing is that, being Spanish-speaking, they create interfaces in English, they should make them in Spanish, IDES in English, there are lots of why not do something that all of us who do not handle English understand, otherwise I don't have any but congratulate them.

    regards

  7.   Eugeniu Tambur said

    I like it, but at the moment it is something green, I have tested it and it leaves me stunned, and it restarts the windows explorer constantly and more errors, but as soon as they fix it and it is something more stable it will undoubtedly be very successful.

  8.   daniel dcs said

    Excellent work "made in" Argentina !!!! Sincere congratulations to the entire development team !!!!

  9.   neyer said

    Greetings to all, very good work, the IDE is quite comfortable to use, it would be very interesting to include a Graphical User Interface editor, it would also be fascinating if it allows you to generate the project documentation (Maybe in the style of the Javadocs).

    Keep going.