Re: Implement additional Hints for existing Language
geertjan wielenga <[email protected]>
| Newsgroups | gmane.comp.java.netbeans.modules.openide.devel |
|---|---|
| Organization | Oracle Corporation |
| Message-ID | <[email protected]> |
On 9-10-2016 13:49, Alex Muthmann wrote:
> Can you give me an example for this approach? I already had a look
> into this, but I was only able to find the possiblity to implement a
> "Java Hint".
Really look in the source code, see the
'html.editor\src\org\netbeans\modules\html\editor\hints' package for
example, i.e., in the 'html.editor' module.
> Also the Wizard for Module Development does not provide anything that
> looks even vaguely correct.
There are hundreds of things that can be done with NetBeans APIs that
are not supported by the wizards...
Gj
>
> Am 2016-10-09 13:38, schrieb geertjan wielenga:
>> Why not extend the existing HTML editor instead of creating a Sightly
>> editor? I.e., maybe don't create SightlyLanguage at all and use the
>> HTML extension points in NetBeans? You can embed one language in
>> another, if needed.
>>
>> Gj
>>
>> On 9-10-2016 13:27, Alex Muthmann wrote:
>>> Ok :)
>>>
>>> Some time ago, Adobe published a new Templating Language (Sightly)
>>> which is afaik currently only used in Adobe's Experience Manager
>>> (AEM). Most of the work is done in html files which may contain
>>> special tags evaluated by the Sightly-Compiler (e.g. <div
>>> data-sly-test='${foobar}>)
>>>
>>> To simplify work, I implemented a Plugin for Netbeans that provides
>>> Autocompletion for those tags
>>> (http://wcm.io/tooling/netbeans/sightly/). But as I've got some
>>> spare time now, I'd like to extend the plugin to provide additional
>>> Hints for wrong tags, invalid code etc.
>>>
>>> Netbeans uses a combination of the interface GsfLanguage and
>>> HintProvider to supply hints. The Language has to be annotated with
>>> LanguageRegistration and a matching mimeType:
>>>
>>> @LanguageRegistration(mimeType="text/html", useMultiview = true)
>>>
>>> As Sightly is a mere extension of the featureset of the
>>> Html-Language (implemented in
>>> org.netbeans.modules.html.editor.gsf.HtmlLanguage), I need to
>>> register my Language "SightlyLanguage" on the mimeType "text/html".
>>> At this point I'd expect Netbeans to use both HintProviders provided
>>> by HtmlLanguage AND SightlyLanguage but somehow only the later one
>>> is used.
>>> I did some research here and found the "getLanguageByMimeType"
>>> method in org.netbeans.modules.csl.core.LanguageRegistry which only
>>> returns a single Language for a given mimetype. Based on this
>>> finding, my assumption is, that Netbeans does not allow multiple
>>> Language registered on the same mimetype.
>>>
>>> So now I'm looking for a way to either bypass this limitation or get
>>> Netbeans to use my Hints in another way.
>>>
>>> I hope this is a better description of my problem?
>>>
>>>
>>>
>>> Am 2016-10-09 12:30, schrieb geertjan wielenga:
>>>> On 9-10-2016 12:28, Alex Muthmann wrote:
>>>>> I'm sorry to repeat myself but my problem is not, that I'm unable
>>>>> to implement and register a hint but that it does seem to be
>>>>> impossible, to add hints to an existing Language.
>>>>
>>>> I don't understand. JavaScript is an existing language. If you want to
>>>> add hints to an existing language, e.g., JavaScript, then you create
>>>> rules and register them in the layer.
>>>>
>>>>> If I would like to implement a new language with a new mimetype
>>>>> etc, I would not have to ask those questions.
>>>>>
>>>>> All I need is an advice, how multiple Languages can be registered
>>>>> on the same mimetype OR if there is another way to add hints.
>>>>
>>>> No, I don't understand at all.
>>>>
>>>> This is the first I'm hearing in this thread about multiple languages.
>>>>
>>>> Can you explain in a lot more detail the context of what you're
>>>> trying to do.
>>>>
>>>> Gj
>>>>
>>>>
>>>>>
>>>>>
>>>>> Am 2016-10-09 12:24, schrieb geertjan wielenga:
>>>>>> Now that you have a HintsProvider, you need to implement Rules
>>>>>> (pic-1)
>>>>>> and register them in the layer (pic-2).
>>>>>>
>>>>>> Gj
>>>>>>
>>>>>> On 9-10-2016 12:18, Alex Muthmann wrote:
>>>>>>> Please have a look at the github links I provided, you'll see,
>>>>>>> that I already have both Language and HintsProvider implemented.
>>>>>>>
>>>>>>> Also both classes you mention do NOT cover my use case as they
>>>>>>> are mere Hints used in JsHintsProvider, which is used in
>>>>>>> JsLanguage (registered on text/javascript). So this does not add
>>>>>>> a new HTML hint in a module but implements a completely new
>>>>>>> Language :(
>>>>>>>
>>>>>>> Am 2016-10-09 12:10, schrieb geertjan wielenga:
>>>>>>>> Look at org.netbeans.modules.javascript2.editor.hints.JsAstRule or
>>>>>>>> JsConventionHint. Also you have to implement HintsProvider.
>>>>>>>>
>>>>>>>> Gj
>>>>>>>>
>>>>>>>> On 9-10-2016 11:50, Alex Muthmann wrote:
>>>>>>>>> yes, exactly, that would be awesome!
>>>>>>>>>
>>>>>>>>> Am 2016-10-09 11:42, schrieb geertjan wielenga:
>>>>>>>>>> So, to be clear, if I show an example of how to create a new
>>>>>>>>>> plugin
>>>>>>>>>> that adds a new HTML hint in NetBeans IDE, that's what you're
>>>>>>>>>> looking
>>>>>>>>>> for?
>>>>>>>>>>
>>>>>>>>>> Gj
>>>>>>>>>>
>>>>>>>>>> On 9-10-2016 11:39, Alex Muthmann wrote:
>>>>>>>>>>> Yes, this is what I (of course) did first, I also had a
>>>>>>>>>>> deeper look into the Netbeans sources but there was no
>>>>>>>>>>> implementation covering my requirement (extend an existing
>>>>>>>>>>> language). It looks easy to implement a new one, but if you
>>>>>>>>>>> need to use an already registered mimeType it gets fuzzy :(
>>>>>>>>>>>
>>>>>>>>>>> Am 2016-10-09 01:13, schrieb geertjan wielenga:
>>>>>>>>>>>> I'll try to take a look but if I were you I'd go to Google
>>>>>>>>>>>> and search
>>>>>>>>>>>> for 'getHintsProvider' to see how others have implemented
>>>>>>>>>>>> that -- I
>>>>>>>>>>>> can see many implementations when I do that.
>>>>>>>>>>>>
>>>>>>>>>>>> Gj
>>>>>>>>>>>>
>>>>>>>>>>>> On 8-10-2016 20:57, Alex Muthmann wrote:
>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>
>>>>>>>>>>>>> thanks for your reply.
>>>>>>>>>>>>>
>>>>>>>>>>>>> You can find the code here:
>>>>>>>>>>>>> https://github.com/wcm-io/wcm-io-tooling/tree/netbeans-sightly-hints
>>>>>>>>>>>>> SightlyLanguage.java:
>>>>>>>>>>>>> https://github.com/wcm-io/wcm-io-tooling/blob/netbeans-sightly-hints/netbeans/sightly/src/main/java/io/wcm/tooling/netbeans/sightly/editor/SightlyLanguage.java
>>>>>>>>>>>>> SightylHintsProvider:
>>>>>>>>>>>>> https://github.com/wcm-io/wcm-io-tooling/blob/netbeans-sightly-hints/netbeans/sightly/src/main/java/io/wcm/tooling/netbeans/sightly/editor/hints/SightlyHintsProvider.java
>>>>>>>>>>>>>
>>>>>>>>>>>>> I added some exceptions, so I would expect to see those as
>>>>>>>>>>>>> soon, as the language is called successfully.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Am 2016-10-08 12:21, schrieb geertjan wielenga:
>>>>>>>>>>>>>> On 7-10-2016 0:26, Alex Muthmann wrote:
>>>>>>>>>>>>>>> Hi there,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> there has already be a discussion with Geertjan and Petr
>>>>>>>>>>>>>>> regarding the options to implement additional Hints for
>>>>>>>>>>>>>>> an existing language. I need to add additional Hints for
>>>>>>>>>>>>>>> HTML files and the consensus was, that I should use the
>>>>>>>>>>>>>>> CSL API to implement a Language and add a HintProvider.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I did some basic tests
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Put your code on GitHub and send a link to it here so we
>>>>>>>>>>>>>> can all see
>>>>>>>>>>>>>> the code rather than text.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Gj
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> but ran into the following situation:
>>>>>>>>>>>>>>> As soon as I register a new Language XYZ which uses the
>>>>>>>>>>>>>>> mimeType text/html, the build-in HTML Language does not
>>>>>>>>>>>>>>> work anymore (no hints, no code-completion etc). I'd
>>>>>>>>>>>>>>> expect that all languages registered on a mimeType are
>>>>>>>>>>>>>>> used and not only one of those.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I was not able to find this use-case in the netbeans
>>>>>>>>>>>>>>> source-code and I'm currently lost :(
>>>>>>>>>>>>>>> Could somebody probably provide an example of a working
>>>>>>>>>>>>>>> extension of an existing language or an alternative to
>>>>>>>>>>>>>>> the implementation of a complete new language?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thank you very much,
>>>>>>>>>>>>>>> Alex Muthmann