import { Observable } from "rxjs/Observable";
import "rxjs/add/observable/of";

const someObservable = Observable.of(0);
      ~~~~~~~~~~~~~~                                                                        [finnish % ("someObservable")]

const someEmptyObject = {};
const someObject = { ...someEmptyObject, someKey: someObservable };
                                         ~~~~~~~                                            [finnish % ("someKey")]
const { someKey } = someObject;
        ~~~~~~~                                                                             [finnish % ("someKey")]
const { someKey: someRenamedKey } = someObject;
                 ~~~~~~~~~~~~~~                                                             [finnish % ("someRenamedKey")]

const someArray = [someObservable];
const [someElement] = someArray;
       ~~~~~~~~~~~                                                                          [finnish % ("someElement")]
someArray.forEach(function (element: Observable<any>): void {});
                            ~~~~~~~                                                         [finnish % ("element")]
someArray.forEach((element: Observable<any>) => {});
                   ~~~~~~~                                                                  [finnish % ("element")]

function someFunction(someParam: Observable<any>): Observable<any> { return someParam; }
         ~~~~~~~~~~~~                                                                       [finnish % ("someFunction")]
                      ~~~~~~~~~                                                             [finnish % ("someParam")]

class SomeClass {
    someProperty: Observable<any>;
    ~~~~~~~~~~~~                                                                            [finnish % ("someProperty")]
    constructor (someParam: Observable<any>) {}
                 ~~~~~~~~~                                                                  [finnish % ("someParam")]
    get someGetter(): Observable<any> { throw new Error("Some error."); }
        ~~~~~~~~~~                                                                          [finnish % ("someGetter")]
    set someSetter(someParam: Observable<any>) {}
        ~~~~~~~~~~                                                                          [finnish % ("someSetter")]
                   ~~~~~~~~~                                                                [finnish % ("someParam")]
    someMethod(someParam: Observable<any>): Observable<any> { return someParam; }
               ~~~~~~~~~                                                                    [finnish % ("someParam")]
}

interface SomeInterface {
    someProperty: Observable<any>;
    ~~~~~~~~~~~~                                                                            [finnish % ("someProperty")]
    someMethod(someParam: Observable<any>): Observable<any>;
               ~~~~~~~~~                                                                    [finnish % ("someParam")]
}

[finnish]: Finnish notation required for %s
