Re: Implement additional Hints for existing Language
Alex Muthmann <[email protected]>
| Newsgroups | gmane.comp.java.netbeans.modules.openide.devel |
|---|---|
| Message-ID | <[email protected]> |
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".
Also the Wizard for Module Development does not provide anything that
looks even vaguely correct.
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