-
-
Notifications
You must be signed in to change notification settings - Fork 74
Implemented features
Alexandr Evstigneev edited this page May 22, 2016
·
40 revisions
Here is the list of features, currently implemented in the Camelcade (don't forget to check known issues):
- Perl5 lexing and parsing. As soon as it's not a port of native Perl5 lexer/parser, it may have some bugs. If you've encountered situation, where your code is not being parsed properly, feel free to create an issue with code example.
- Currently supported languages are Perl5, POD, and some extensions:
- Class::Accessor api
-
TryCatch basic support. Currently
catch{}
,catch($var){}
andcatch(Foo::Bar $var){}
are supported - Exporter
- HTML::Mason
- Mason2
-
Method::Signatures::Simple -
method
andfunc
- Mojolicious templates
- Moose
- Php-style Perl5 (Embedded perl)
- Switch core module
- Miscellaneous
- Syntax highlighting. Perl and POD sources are highlighted and there is a Default theme, taken from NP++.
- Interpolation in appropriate strings, here-docs and regexps.
- Brace matching, quote matching, regex delimiters matching, code folding, quote handling.
- File structure view
- Class hierarchy view
- [Subs and packages annotations] (https://github.com/hurricup/Perl5-IDEA/wiki/Subs-annotations)
- Perl5 interpreter (SDK) and Perl5 module type support. You should add Perl5 interpreter as project SDK to give Camelcade access to installed packages. More..
- Configuration
- Run configurations for Perl scripts
- Self-object reference variable names
- Automatic language injection in here-doc
- Navigation & Refactoring
- Gutter navigation to super/sub classes
- Gutter navigation to super/inner class methods
- Go to symbol navigation for: subs, constants, packages and global variables
- Go to declaration navigation for subs, variables, packages, labels and here-doc markers. See [current subs resolution status] (https://github.com/hurricup/Perl5-IDEA/wiki/Subs-resolution-status).
- Both
dfs
andc3
mros supported for methods resolution - AUTOLOADed methods may be resolved, if AUTOLOAD declared as a named block, not sub
- All navigatable entities can be refactored
- Class methods re-factoring with methods in subclasses and optionally in super-classes
- Completion and Smart Keys
- Quote handler for regex and quote-like operators
- Variables, subs/methods and packages auto-completion
- Auto-suggestion of names for here-doc markers, variables and subs/methods
- Auto-completion of hash indexes (dumb one, offers seen strings)
- Live templates for Perl5 constructions and test scripts macroses.
- Code style and formatter:
- Perl5-specific CodeStyle settings panel.
- Spacing settings for perl code.
- Optional quotes automatic insertion/removing. NB: numeric values are not quoted/unquoted.
- Optional dereference insertion/removing between hash/array indexes.
- Optional parentheses insertion/removing in statement modifiers.
- Conversion
$var->{key}
to$$var{key}
and vice versa. - Conversion
@$array_ref
to@{$array_ref}
and vice versa (does not affects hash/array elements or slices). - Conversion
main::
to::
and vice versa.
- Actions
- Deparse file - deparses current file using
B::Deparse
. - Re-format with
Perl::Tidy
- reformats current file. All configuration must be done via.perltidyrc
file in project root (see Perl::Tidy documentation). There is no UI to configure settings for now/
- Deparse file - deparses current file using
- Code Generation
- Actions to generate getters and setters
- Action to generate class constructor
- Action to override method of parent class
- Create Perl5 scripts, packages, tests and templates context menu actions.
- Intentions
- Convert string to here-doc
- Documentation
- POD support: live templates, completion, navigation, refactoring and few useful inspections
- Context help: hit Ctrl+Q on element in question and get your answer from pod files or inline pod
- Code inspections:
-
Perl::Critic
annotations. All configurations must be done via.perlcriticrc
file in project root or home dir (see Perl::Critic documentation). There is no any UI to configurePerl::Critic
settings for now. Only enable/disable checkbox in Perl5 settings. - Labels
- Undeclared and unresolved labels inspections
- Packages
- Missing package file
- Undefined namespace
- Multiple namespace definitions
- Namespace clash with core namespace
- Missing
strict
pragma - Missing
warnings
pragma
- Subs
- Deprecated sub
- Undefined and undeclared sub
- Multiple sub definitions/declarations
- Fancy method call:
method Package()
with quickfix suggested to change toPackage->method()
- Unused subs/typeglobs (disabled by default, got performance issues on large files and common subs names)
- Variables
- Undeclared variable
- Shadowing
- Lexical built-in declaration
- Unused lexical variables
- Unused global variables
- File level variables inspection. (Pretty useful while migrating from CGI to some persistent environment)
-
- IntelliLang integration.
- Heredoc texts may be automatically injected with other language, depending on marker text. To make this work, IntelliLang plugin must be enabled and appropriate Language supported by IDEA natively or via plugin. Following markers are currently supported:
- JavaScript: JS, JS15, JS16, JS17, JS18, APPLEJS
- Database: SQL, MYSQL, PGSQL, TSQL, OSQLP, DB2, SQL92, SQLITE, SYBASE, HSQLDB, GSQL, OSQL (Both Database navigator and JetBrains Database tools are supported)
- Web-related: JSON, CSS, DTD, XHTML, XML, HTML
- Templating: EPERL5, MOJO
- Misc: JAVA, YAML, MANIFEST, PHP, PYTHON, PERL5
-
#@inject
annotation, allows you to inject other languages in strings. Annotation may be before the string, before the statement containing the string or in the end of line string ends. (NB: eol annotation may be misleading and should be considered experimental, see #1072. Need a feedback.)
- Heredoc texts may be automatically injected with other language, depending on marker text. To make this work, IntelliLang plugin must be enabled and appropriate Language supported by IDEA natively or via plugin. Following markers are currently supported:
- IDEA extensions
- Extension point for package processors and set of interfaces to implement custom package processors (like
Mojo::Base
which isstrict
+v5.10
+base
)
- Extension point for package processors and set of interfaces to implement custom package processors (like
- Home
- Getting started
- Features
- Languages & Frameworks
- Integration
- Version Managers
- Misc